如何获取由 QDialogButtonBox 创建的 QPushButton 的角色?
Posted
技术标签:
【中文标题】如何获取由 QDialogButtonBox 创建的 QPushButton 的角色?【英文标题】:How to get the role of a QPushButton created by a QDialogButtonBox? 【发布时间】:2010-12-07 03:27:07 【问题描述】:我正在尝试获取当前活动窗口的所有按钮子小部件。这些按钮是通过 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...
在获取按钮的角色时我得到一个负值:(
谁能告诉我代码有什么问题?
【问题讨论】:
要么按照 jkerian 所说的去做,要么如果您使用标准按钮并且只需要其中一个按钮: QPushButton* ok = buttonBox->button( QDialogButtonBox::Ok ) 我试过 QDialogButtonBox pButtonRole = new QDialogButtonBox(); QDialogButtonBox::ButtonRole role = pButtonRole->buttonRole(i.next()); qDebug() 【参考方案1】:你不能像那样调用非静态方法。您需要拥有QDialogButtonBox
变量并调用该特定实例以使buttonRole()
工作。
QDialogButtonBox::ButtonRole role = myButtonBoxPtr->buttonRole(i.next());
【讨论】:
我试过 QDialogButtonBox pButtonRole = new QDialogButtonBox(); QDialogButtonBox::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);
【讨论】:
我明白了。但是,我不知道如何获取 QDialogButtonBox 的实例。我所拥有的是一个窗口中所有按钮的列表。如何获取 myButtonBoxPtr 的实例? 您可以像获得 QPushButtons 列表一样获得 QDialogButtonBoxes 列表。以上是关于如何获取由 QDialogButtonBox 创建的 QPushButton 的角色?的主要内容,如果未能解决你的问题,请参考以下文章
如何将图标设置为 QDialogButtonBox 中的新按钮?
如何将 qlabel 添加到 QDialogButtonBox UI 文件
如何处理 QDialogButtonBox RestoreDefaults 按钮
如何在QDialogBu ttonBox中将图标设置为新按钮?