如何处理 QDialogBu​​ttonBox RestoreDefaults 按钮

Posted

技术标签:

【中文标题】如何处理 QDialogBu​​ttonBox 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 &lt;connections&gt; 部分,然后在代码中是:

void OptionsWindow::clicked(QAbstractButton* button)

    if (mUi->buttonBox->buttonRole(button) == QDialogButtonBox::ButtonRole::ResetRole)
    
        mOptionsData = OptionsData();
        mSavedOptionsData = mOptionsData;
        updateUi();
    

作为一个插槽。

【讨论】:

以上是关于如何处理 QDialogBu​​ttonBox RestoreDefaults 按钮的主要内容,如果未能解决你的问题,请参考以下文章

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

不同平台上的按钮顺序(QDialogBu​​ttonBox)

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

Qt:如何使用 QSignalMapper 为非标准按钮实现 QDialogBu​​ttonBox ?

将插槽连接到 QDialogBu​​ttonBox 中的按钮

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