我正在尝试获取当前活动窗口的所有按钮子窗口小部件。按钮是通过 QDialogButtonBox 创建的。我试图获取每个按钮的角色,这样我就可以确定哪个按钮是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...
}
我在获取按钮的角色时获得负值:(
有人可以告诉我代码有什么问题吗?
答案 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}}