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

时间:2018-01-31 17:49:57

标签: c++ qt

我想在启动程序时显示一个对话框。为此,我创建了一个名为Dialog的新Qt Designer表单类。 在main.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() ;
}

但是MainWindow窗口没有显示...... 我怎么解决这个问题?

2 个答案:

答案 0 :(得分:2)

你在对象的生命周期中的问题。在on_ok_butt_clicked()中,您可以创建MainWindow对象。从on_ok_butt_clicked()返回后,MainWindow对象将被销毁。

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

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

第二个解决方案:

SomeDialog w;
w.exec();

答案 1 :(得分:0)

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