2009-05-25 3 views
0

안녕하세요! 나는 다음과 같은Qt : QList of QButtonGroup

QList<QButtonGroup*> groups; 
    for (int i=0; i<nGroup; i++) 
    { 
     QButtonGroup *objects = new QButtonGroup(this); 
     objects->setExclusive(false); 
     for (int j=0; j<nObject; j++) 
     { 
      Led *tempLed = new Led(); 
      tempLed->setAutoExclusive(false); 
      layout->addWidget(tempLed,j,i,Qt::AlignLeft); 
      objects->addButton(tempLed); 
     } 
     groups.append(objects); 
    } 

을하려고 그리고 이런 식으로 뭔가를 시도 :

groups.at(1)->button(2)->setChecked(true); 

코드는 컴파일하지만 런타임에 처리되지 않은 예외가 발생합니다. 내가 뭘 잘못하고 있니? QButtonGroup 그룹을 만드는 더 좋은 방법이 있습니까?

답변

3

QButtonGroup :: button 함수는 특정 ID에 대한 단추를 반환하지만 buttongroup에 단추를 추가 할 때 id를 사용하지 않았습니다. QButtonGroup :: button null 포인터 액세스 예외가 귀하의 예제에서 0을 반환합니다. 당신이

... 
objects->addButton(tempLed, j); 
... 

에 코드를 변경하는 경우

... 
objects->addButton(tempLed); 
... 

당신은 원래의 코드 작동합니다.

목록에서 값 (== 포인터)을 변경하지 않으므로 QList :: operator []보다 QList :: at를 더 선호합니다.

0

OK, 나는 이런 식으로 해결 :

QButtonGroup *bG; 
bG = groups[gr]; 
QAbstractButton *aB = bG->buttons()[obj]; 
aB->setChecked(command); 

정말 문제가 네가 무슨하지 않았다.

+1

분명히 버튼 (2)이 잘못되어 버튼() [2]이 필요했습니다. Qt를 거의 사용하지 않아서 더 이상 말할 수 없습니다. – Blindy

1

문제는 at과 관련이 있다고 생각합니다. 그것은 const 항목을 반환하고, 당신은 const가 아닌 함수를 호출하고 있습니다.

대신 operator[]을 사용하십시오.

+0

예, 이제 QList와 QButtonGroup에 연산자 []를 사용합니다. 감사합니다. – Dmitri

+0

연산자 []를 사용하면 실수를하거나 원치 않는 동작이 발생할 수 있으므로주의하십시오. –