我正在尝试获取当前活动窗口的所有按钮子小部件。这些按钮是通过QDialogButtonBox创建的。我正在尝试获取每个按钮的角色,以便可以确定哪个按钮是“确定”,“取消”或“保存”按钮。但是,以下代码出现错误:
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...
}
当我获得按钮的角色时,我得到一个负值:(
有人可以告诉我代码有什么问题吗?
最佳答案
您正在创建一个新的空QDialogButtonBox
,它对buttons
列表中的allPButtons
一无所知。在它们上调用buttonRole()
会返回-1(InvalidRole),因为buttons
不在该button-box
中。
您必须按照jkerian的说明进行操作,并且myButtonBoxPtr
必须指向窗口中已经存在的QDialogButtonBox
。
您可以尝试这样的操作(如果您有一个ButtonBox):
QDialogButtonBox *box = pWin->findChild<QDialogButtonBox *>();
foreach(QAbstractButton* button, box->buttons())
{ qDebug() << box->buttonRole(button); }
关于c++ - 如何获得由QDialogButtonBox创建的QPushButton的角色?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4373123/