2

我有一个设置对话框,其中包含一些需要另一个对话框才能完全配置的设置。我的窗口显示了数据的预览,因为它正在通过这些设置进行调整。单击配置按钮后,我会启动另一个模态对话框,其中包含一些旋钮以微调特定设置。

我希望将子对话框上旋钮的扭曲结果发送回父对话框,以便在播放子对话框时显示新的预览数据。我想象的方式是我在修改它的数据预览成员变量后调用的父级中有一个“刷新预览”函数。问题是,我该怎么做?如何从父对话框作为模态子对话框访问 getter/setter?如果我确实访问它们,预览会改变还是会因为孩子的形态而被阻止?

谢谢!

4

1 回答 1

0

在 Qt 世界中,通常鼓励利用 Signal/Slot 机制。简而言之,当类中发生变化时,类可以发送信号。只要我们适当地通知接收类,插槽就可以接收此类信号。

让我们看看我们如何为目前的案例做到这一点。

在我们的设置对话框构造函数中,我们包含以下代码(假设您在按下按钮时显示“另一个”对话框):

Dialog *dialog = new Dialog();
connect(dialog->dial(), &QDial::valueChanged, this, &QSettingsDialog::changeTemp);

代码演练:

  • 我们的 QDialog 是用 QDial 对象 dial 构建的。我们使用 dialog->dial() 访问该成员指针。

  • 我们将发出在表盘上更改的值的信号绑定到名为 changeTemp 的插槽,该插槽接收更改的值并相应地在设置对话框(父级)上设置显示小部件。

changeTemp 方法可能是这样的:

void QSettingsDialog::changeTemp(int val)
{
    lineEdit->setText(QString::number(val));
}

笔记:

  • 您需要在所有需要实现 Signals 和 slot 的类上声明 Q_OBJECT 宏。在这种情况下,设置对话框和子对话框。

  • 上面的信号/槽签名是新的 Qt5 签名。如果您使用的版本低于 5.0,则签名不同。请参阅文档。

于 2013-08-19T02:48:35.803 回答