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

How to trigger a method after closing a dialog box

本文关键字:方法 对话框      更新时间:2023-10-16

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

我在设置对话框中触发了 closeEvent,但不确定如何从 closeevent 在主窗口上调用方法。

编辑:我设法覆盖closeEvent,但我不确定的是如何在SettingDialog的主窗口中触发方法。我试过这个:

void SettingsDialog::closeEvent(QCloseEvent *event) {
    qDebug() << "CloseEvent Called";
    QTimer::singleShot(250, this, &MainWindow::SettingsSaved);
}

它给出错误:

错误:调用 'QTimer::singleShot(int, SettingsDialog*, void (MainWindow::*((((' QTimer::singleShot(250, this, &MainWindow::SettingsSaved(; ^

解决更新的问题:

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

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();
}