如何处理 QDialogButtonBox RestoreDefaults 按钮
Posted
技术标签:
【中文标题】如何处理 QDialogButtonBox RestoreDefaults 按钮【英文标题】:How to handle QDialogButtonBox RestoreDefaults button 【发布时间】:2012-02-01 02:01:10 【问题描述】:在 Qt 设计器中,我创建了一个对话框,其中包含一个 QDialogButtonBox
,其中包含确定、取消和“恢复默认值”按钮。花了一段时间,但我想出了如何在我的实现文件中设置信号/插槽:
QPushButton* resetButton = m_ui.buttonBox->button(QDialogButtonBox::RestoreDefaults);
connect(resetButton, SIGNAL(clicked()), this, SLOT(resetDefaultsPressed()));
我的问题是:有没有办法像使用 OK 和 Cancel 按钮一样在 QtDesigner 中设置信号/插槽?我找不到一个名为RestoreDefaults
或类似的信号...我的方法有效,但如果所有信号/插槽设置都在 uic 生成的.h
文件中,那就太好了。
【问题讨论】:
【参考方案1】:Qt Designer 只能处理类中声明的信号。
但是你可以编写一个从QDialogButtonBox
派生的新类,使用信号clicked
来接收触发了哪个按钮角色,并发出新的信号。
然后您可以将您的QDialogButtonBox
提升到设计器中的新类,并且您必须手动为每个 ui 文件添加信号(左键单击提升的小部件,然后单击“更改信号/插槽。 .."),或者编写一个设计器插件,让您的自定义类出现在设计器小部件列表中(有关详细信息,请参阅that other answer)。
【讨论】:
【参考方案2】:我已经通过添加完成了
<connection>
<sender>buttonBox</sender>
<signal>clicked(button)</signal>
<receiver>OptionsWindow</receiver>
<slot>clicked(button)</slot>
</connection>
到我的OptionsWindow.ui
<connections>
部分,然后在代码中是:
void OptionsWindow::clicked(QAbstractButton* button)
if (mUi->buttonBox->buttonRole(button) == QDialogButtonBox::ButtonRole::ResetRole)
mOptionsData = OptionsData();
mSavedOptionsData = mOptionsData;
updateUi();
作为一个插槽。
【讨论】:
以上是关于如何处理 QDialogButtonBox RestoreDefaults 按钮的主要内容,如果未能解决你的问题,请参考以下文章
访问 Qt 的 QDialogButtonBox 中的单个按钮
不同平台上的按钮顺序(QDialogButtonBox)
如何获取由 QDialogButtonBox 创建的 QPushButton 的角色?
Qt:如何使用 QSignalMapper 为非标准按钮实现 QDialogButtonBox ?