关闭对话框后如何触发方法

时间:2017-11-20 01:29:17

标签: c++ qt callback dialog delegates

我制作了一个简单的工具应用程序。有一个设置按钮,可以打开设置对话框窗口。有一个保存按钮,用于保存设置并关闭窗口。我想要的是如何在关闭对话框时使主窗口执行特定的功能。

我在settingsdialog中触发了closeEvent,但不确定如何从closeevent调用mainwindow上的方法。

编辑:我设法覆盖closeEvent,但我不确定如何从SettingDialog中激活Mainwindow中的方法。我试过这个:

void SettingsDialog::closeEvent(QCloseEvent *event) {

    qDebug() << "CloseEvent Called";
    QTimer::singleShot(250, this, &MainWindow::SettingsSaved);

}

它给出错误:

  

错误:没有匹配函数来调用&#39; QTimer :: singleShot(int,   SettingsDialog *,void(MainWindow :: *)())&#39;        QTimer :: singleShot(250,this,&amp; MainWindow :: SettingsSaved);                                                                ^

1 个答案:

答案 0 :(得分:0)

解决更新后的问题:

创建对话框时,将主窗口指针作为父窗口传递:

new SettingsDialog(this);

假设您是在主窗口中创建它。现在你有一个指向对话框内主窗口的指针,虽然它会显示为QWidget *

将父级转换为适当的类型:

MainWindow * mainptr = qobject_cast<MainWindow *>(parent());

你甚至不需要将计时器用于你想要达到的目标,你可以简单地说:

if (mainptr) mainptr->SettingsSaved();

所以,最后,这样的事情:

void SettingsDialog::closeEvent(QCloseEvent *event) {
   if (settingsAreAllOK) {
     MainWindow * mainptr = qobject_cast<MainWindow *>(parent());
     if (mainptr) mainptr->SettingsSaved();
     event->accept();
   } else event->ignore();
}