2013-06-11 115 views
0

我正在嘗試做一些我認爲會非常簡單的事情:在沒有任何佈局的情況下將QRadioButton添加到我的QWizardPage中。當用戶點擊按鈕,接着將QRadioButton添加到沒有佈局的QWidget中

下面的代碼,增加了QRadioButton被稱爲(信號currentIdChanged調用的代碼):

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

QList<QRadioButton*> listButton = ui.wpSINGLE_USER->findChildren<QRadioButton*>(); 
int size = listButton.size(); 
QRect rect1 = listButton[0]->rect(); 
QRect rect2 = listButton[1]->rect(); 

我然後意識到,似乎問題可能是QRect。

rect1和rect2的值是錯誤的。 rect1 =(0,0,259,39)和rect2 =(0,0,259,39)對於rect2(50,60,260,40),rect1的正確值應該是(50,20,260,40)和n,

那麼,什麼是問題,如何將QRadioButton添加到沒有佈局的QWidget?

編輯

也就是說奇怪,如果不是加入QRadioButton到QWizardPage當用戶點擊按鈕旁邊,我將它們添加到QWizard構造器,它的工作原理。

有人可以告訴我爲什麼我無法將QRadioButton添加到我的QWizardPage中插入到我的插槽功能中嗎?

謝謝

回答

2

QRect表現正常。您應該檢查geometry(),而不是rect()

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

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

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

下面是一些例子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

一般來說...

使用的是佈局,使您的生活更輕鬆。有一條學習曲線,起初代碼看起來很有趣,但是長期來看,你會感激你的。如果可能的話,我避免使用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,它沒有更新你的widget。

如果您更改了Widget中的內容,則需要發佈update()事件才能反映出來。

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

此外,當你不使用的佈局,分層和定位可以去有點瘋狂。確保你沒有在添加按鈕的位置上繪製其他東西。

這裏有一些事情要記住。雖然它看起來像你可能正在照顧一些已經...

另一個可能發生的問題是,如果你添加一個QRadioButton不到佈局,並忘記父母它,它可能不會被添加在所有。親子關係QObject也很好地通過佈局來處理。

最後,您需要確保您的按鈕存在您的父窗口小部件的範圍。所以如果你在一個插槽中聲明它,並且它有一個局部範圍,那麼當你離開插槽時,它就消失了。 (你把它放在堆上,所以它應該沒問題)。

因此,使它成爲您的子類QWizardPage的成員變量,並使其成爲指針。 Qt可以很好地處理對象的父項,並且正確地刪除正確的對象。

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

此外,一定要看看你的佈局採用「QGroupBox」當您使用QRadioButton秒。這很好地處理了排他屬性。

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