2013-06-11 5 views
0

레이아웃없이 QRadioButton을 QWizardPage에 추가하는 것이 매우 쉽다는 것을 생각하고 있습니다. 내가 무엇을 것입니다 볼 코드의이 작은 조각을 추가레이아웃없이 QWidget에 QRadioButton 추가

int newPositionY = 0; 
for (vector<Events::VCS::PnPDevice>::const_iterator it=m_devices.begin(); it!=m_devices.end(); it++) 
{ 
    if (it->type == Events::VCS::HEADSET) 
    { 
     //add a radio button 
     stringstream text; 
     text << (it->name) << " " << (it->serialNumber); 
     QRadioButton* radioButton = new QRadioButton(ui.wpSINGLE_USER); 
     radioButton->setGeometry(50, 20 + newPositionY, 260, 40); 
     radioButton->setText(text.str().c_str()); 
     newPositionY = newPositionY + 40 
    } 
} 

}

: 사용자가 다음 버튼을 클릭하면 QRadioButton을 추가

다음 코드가 호출되고 (신호 currentIdChanged 코드를 호출) on QRadioButton

그런 다음 문제가 QRect 일 수 있습니다.

rect1과 rect2의 값이 잘못되었습니다. rect1의 올바른 값은 rect2 (50, 60, 260, 40)의 경우 (50, 20, 260, 40)이고 n 인 경우 rect1 = (0, 0, 259, 39)

QRadioButton을 레이아웃없이 QWidget에 추가하는 방법은 무엇이 문제입니까?

편집하는 대신 사용자가 다음 나는 QWizard의 생성자로 추가하고 버튼을 클릭하면 QWizardPage에 QRadioButton을 추가하는, 경우, 이상하다

, 그것은 작동합니다.

누군가 내 슬롯 기능에 내 QWizardPage에 QRadioButton을 추가 할 수없는 이유를 말할 수 있습니까?

덕분에

답변

2

QRect 적절하게 행동한다. rect()이 아닌 geometry()을 확인해야합니다.

http://doc-snapshot.qt-project.org/4.8/qwidget.html#geometry-prop

여기

http://doc-snapshot.qt-project.org/4.8/application-windows.html#window-geometry

http://doc-snapshot.qt-project.org/4.8/qwidget.html#rect-prop

연구 가치가있는 몇 가지 QWizard 예 ...

http://qt-project.org/doc/qt-4.8/dialogs-trivialwizard.html

http://qt-project.org/doc/qt-4.8/dialogs-classwizard.html

입니다

http://qt-project.org/doc/qt-4.8/dialogs-licensewizard.html

일반적으로 3,691,363,210 ... 레이아웃을 사용하여

은, 여러분의 인생을 더 쉽게합니다. 학습 곡선이 있으며 처음에는 코드가 재미있어 보이지만 장기적으로 수행 한 것에 대해 감사하게 생각합니다. 가능하다면 Qt Designer 사용을 피하고 레이아웃과 중첩 된 레이아웃을 사용하여 모든 것을 배치합니다. 뻗기와 스페이서 등 필요한 것을 추가하십시오. 훌륭합니다. 나중에 표시하거나 숨길 항목이 필요한 경우 QWidget에 해당 항목을 중첩하고 해당 위젯을 표시하거나 숨겨서 표시 될 때 조정할 수 있습니다.

http://qt-project.org/doc/qt-4.8/layout.html

http://qt-project.org/doc/qt-4.8/tutorials-widgets-windowlayout.html

그것은 QRadioButton이 레이아웃없이 추가 될 때, 그것은 당신의 위젯을 업데이트되지 않도록 수 있습니다

.

위젯의 내용을 변경 한 경우 반영되도록 update() 이벤트를 게시해야합니다. 당신이 레이아웃을 사용하지 않는 경우

http://doc-snapshot.qt-project.org/4.8/qwidget.html#update

는 또한, 레이어 및 위치는 약간 미친 갈 수 있습니다. 버튼이 추가 된 위치 위에 다른 것을 그리지 않았는지 확인하십시오.

다음은 더 많은 것을 명심해야합니다. 비록 당신이 이미 이것들을 돌보아주고있는 것처럼 보일지라도 ...

QRadioButton을 레이아웃에 추가하고 그것을 부모로 만드는 것을 잊어 버리면 또 다른 문제가 발생할 수 있습니다. 모든. QObject의 육아는 레이아웃에서도 훌륭하게 처리됩니다.

마지막으로 상위 위젯의 범위에 해당하는 버튼이 있는지 확인해야합니다. 따라서 슬롯에 선언하고 로컬 범위가있는 경우 슬롯을 떠날 때까지 사라집니다. (당신은 힙에 놓기 때문에 괜찮을 것이다).

그래서 하위 클래스 QWizardPage에 대한 멤버 변수로 만들고 포인터로 만듭니다. Qt는 객체의 parenting을 잘 처리하고 삭제가 객체 트리에 올바르게있는 경우 올바르게 처리합니다.

http://qt-project.org/doc/qt-4.8/objecttrees.html

또한 QRadioButton의를 사용하는 경우 레이아웃에 'QGroupBox'를 사용하여보고해야합니다. 이것은 배타적 속성을 잘 처리합니다.

http://doc-snapshot.qt-project.org/4.8/widgets-groupbox.html

http://doc-snapshot.qt-project.org/4.8/qradiobutton.html#details

희망하는 데 도움이.

+0

업데이트가 작동하지 않지만 QRadioButton을 레이아웃에 추가하면 작동합니다. 또한 당신을 위해 +1 정말 잘 문서화 된 답변. 감사. – peterphonic