我正在尝试获取当前活动窗口的所有按钮子小部件。这些按钮是通过QDialogBu​​ttonBox创建的。我正在尝试获取每个按钮的角色,以便可以确定哪个按钮是“确定”,“取消”或“保存”按钮。但是,以下代码出现错误:

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++ - 如何获得由QDialogBu​​ttonBox创建的QPushButton的角色?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4373123/

10-11 23:11