我制作了一个简单的工具应用程序。有一个设置按钮,可以打开设置对话框窗口。有一个保存按钮,用于保存设置并关闭窗口。我想要的是如何在关闭对话框时使主窗口执行特定的功能。
我在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); ^
答案 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();
}