2010-12-01 57 views
0

我試圖獲取窗口的所有按鈕子部件。這些按鈕是通過創建的QDialogBu​​ttonBox。我如何得到哪一個是取消/確定/保存按鈕?如何獲得由QDialogBu​​ttonBox創建的按鈕的名稱?

我:

QWidget *pWin = QApplication::activeWindow(); 
QList<QPushButton *> allPButtons = pWin->findChildren<QPushButton *>(); 
QListIterator<QPushButton*> i(allPButtons); 
while(i.hasNext()) 
{ 
    //identify which button is cancel/ok/save button here 
    /*Note: This is where I'm having trouble, getting the text of the 
    button here returns NULL. Any other way of Identifying which is 
    which? 
    Is it a special case when buttons are created through QDialogButtonBox?  
    */ 
} 

回答

3

您應該使用QDialogButtonBox::button()方法,以獲得相應的role的按鈕。

例如:

QPushButton* pOkButton = pButtonBox->button(QDialogButtonBox::Ok); 
QPushButton* pCancelButton = pButtonBox->button(QDialogButtonBox::Cancel); 
// and so on... 

一般來說,我會說這是找到一個按鈕可以從它的文字,當你的應用是國際化的這段文字可能會改變一個壞主意。

0

一種方式是通過text參數從構造如QPushButton(const QString & text, QWidget * parent = 0)

QPushButton* buttonSave = new QPushButton("Save"); 
// etc.. 
while(i.hasNext()) 
{ 
    //identify which button is cancel/ok/save button here 
    if(i.next()->text() == "Save") { 
    // do something to save push button 
    } 
} 
+1

獲取文本返回一個空字符串。 :( – Owen 2010-12-01 05:55:37

+0

Owen:當你實例化你的按鈕時,你必須給按鈕分配一個文本字符串 – vls 2010-12-01 15:59:51

相關問題