如何获得QDialogBu​​ttonBox创建的QPushButton的角色?

时间:2010-12-07 03:27:07

标签: c++ qt user-interface widget

我正在尝试获取当前活动窗口的所有按钮子窗口小部件。按钮是通过 QDialogBu​​ttonBox 创建的。我试图获取每个按钮的角色,这样我就可以确定哪个按钮是OK,CANCEL或SAVE按钮。但是,我使用以下代码收到错误:

QWidget *pWin = QApplication::activeWindow();
QList<QPushButton *> allPButtons = pWin->findChildren<QPushButton *>();
QListIterator<QPushButton*> i(allPButtons);
while( i.hasNext() )
{
    QDialogButtonBox *pButtonRole = new QDialogButtonBox();
    QDialogButtonBox::ButtonRole role = pButtonRole->buttonRole(i.next()); 
    qDebug() << "buttonRole: " << role << endl ;  
    //the value of role here is -1, which means it's an invalid role...      
}

我在获取按钮的角色时获得负值:(

有人可以告诉我代码有什么问题吗?

2 个答案:

答案 0 :(得分:3)

您不能像这样调用非静态方法。您需要拥有QDialogButtonBox变量并调用buttonRole()的特定实例才能生效。

QDialogButtonBox::ButtonRole role = myButtonBoxPtr->buttonRole(i.next());

答案 1 :(得分:1)

您正在创建一个新的空QDialogButtonBox,它不知道buttons列表中的allPButtons。在buttonRole()上调用buttons会返回-1(InvalidRole),因为button-box中不存在myButtonBoxPtr

你必须像jkerian写的那样做,QDialogButtonBox必须指向你窗口中已经存在的QDialogButtonBox *box = pWin->findChild<QDialogButtonBox *>(); foreach(QAbstractButton* button, box->buttons()) { qDebug() << box->buttonRole(button); }

您可以尝试这样的事情(如果您有一个ButtonBox):

{{1}}