我想在启动程序时显示一个对话框。为此,我创建了一个名为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窗口没有显示...... 我怎么解决这个问题?
答案 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()