【问题标题】:How to handle QDialogButtonBox RestoreDefaults button如何处理 QDialogBu​​ttonBox RestoreDefaults 按钮
【发布时间】: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 文件中,那就太好了。

【问题讨论】:

    标签: c++ qt qt-designer


    【解决方案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();
          }
      }
      

      作为一个插槽。

      【讨论】:

        猜你喜欢
        • 2015-01-17
        • 2015-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多