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

Posted

技术标签:

【中文标题】如何获取由 QDialogBu​​ttonBox 创建的 QPushButton 的角色?【英文标题】:How to get the role of a QPushButton created by a QDialogButtonBox? 【发布时间】:2010-12-07 03:27:07 【问题描述】:

我正在尝试获取当前活动窗口的所有按钮子小部件。这些按钮是通过 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...      

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

谁能告诉我代码有什么问题?

【问题讨论】:

要么按照 jkerian 所说的去做,要么如果您使用标准按钮并且只需要其中一个按钮: QPushButton* ok = buttonBox->button( QDialogBu​​ttonBox::Ok ) 我试过 QDialogBu​​ttonBox pButtonRole = new QDialogBu​​ttonBox(); QDialogBu​​ttonBox::ButtonRole role = pButtonRole->buttonRole(i.next()); qDebug() 【参考方案1】:

你不能像那样调用非静态方法。您需要拥有QDialogButtonBox 变量并调用该特定实例以使buttonRole() 工作。

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

【讨论】:

我试过 QDialogBu​​ttonBox pButtonRole = new QDialogBu​​ttonBox(); QDialogBu​​ttonBox::ButtonRole 角色 = pButtonRole->buttonRole(i.next()); qDebug() 【参考方案2】:

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

你必须像 jkerian 写的那样做,myButtonBoxPtr 必须指向已经在你的窗口中的QDialogButtonBox

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

QDialogButtonBox *box = pWin->findChild<QDialogButtonBox *>();
foreach(QAbstractButton* button, box->buttons())
 qDebug() << box->buttonRole(button); 

【讨论】:

我明白了。但是,我不知道如何获取 QDialogBu​​ttonBox 的实例。我所拥有的是一个窗口中所有按钮的列表。如何获取 myButtonBoxPtr 的实例? 您可以像获得 QPushButtons 列表一样获得 QDialogBu​​ttonBoxes 列表。

以上是关于如何获取由 QDialogBu​​ttonBox 创建的 QPushButton 的角色?的主要内容,如果未能解决你的问题,请参考以下文章

如何将图标设置为 QDialogBu​​ttonBox 中的新按钮?

如何将 qlabel 添加到 QDialogBu​​ttonBox UI 文件

如何处理 QDialogBu​​ttonBox RestoreDefaults 按钮

如何在QDialogBu ttonBox中将图标设置为新按钮?

根据多个 QComboBox 的文本启用或禁用 QDialogBu​​ttonBox

访问 Qt 的 QDialogBu​​ttonBox 中的单个按钮