如何从另一个Qt Widget表单类调用MainWindow类

How to call MainWindow class from another Qt Widget form class

本文关键字:表单 调用 MainWindow Widget Qt 另一个      更新时间:2023-10-16

我想在程序启动时显示一个对话框,为此,我创建了一个名为Dialog的新Qt设计器表单类。总的来说.cpp我有以下代码来执行Dialog类:

int main(int argc, char *argv[])
{
   QApplication a(argc, argv);
    Dialog diag  ;
    diag.show() ;
   return a.exec();
}

Dialog类包含一个"确定"按钮。当用户按下该按钮时,对话框窗口将关闭,MainWindow将打开。为此,我像这样编码:

void Dialog::on_ok_butt_clicked()
{
   MainWindow w ;
   w.show() ;
}

但主窗口未显示...如何解决这个问题?

您在对象的生存期中存在的问题。在 on_ok_butt_clicked(( 中,创建 MainWindow 对象。从on_ok_butt_clicked((返回后,主窗口对象将被销毁。

您需要创建一个对象,以便在退出 on_ok_butt_clicked(( 方法后保留它。另一种选择是在显示对话框时停止执行方法(这不适用于 QMainWindow,因为 QMainWindow 继承自 QWidget,而不是 QDialog(。第一个解决方案:

MainWindow *w = new MainWindow(this);
w->show();

第二种解决方案:

SomeDialog w;
w.exec();

按照你的方式,对话框对象是主窗口的父对象,这不是一个好的设计,因为对话框通常是一个临时对象,而主窗口将是你的主UI,所以我更喜欢在你的主窗口中创建对话框,当你想先在主窗口中显示hide()对话框时,不要忘记accept()reject()你的对话框