我使用QDialog Window制作了以下面板:
我想,我点击“确定”按钮查看MainWindow。
我编写了以下代码,但它无法正常工作
void QDialog::pushButton_clicked()
{
MainWindow w;
w.show();
}
答案 0 :(得分:1)
如果您的QApplication exec()
已在运行,您仍然可以打开QMainWindow
,但是,在您的示例中,您在函数内的堆栈上创建MainWindow
,并且它的范围在调用show()
之后立即结束。
这意味着一旦pushButton_clicked()
函数返回,将释放MainWindow对象。
提示:将MainWindow的声明移到其他位置,例如给它一个全局范围或将它移动到你自己的QApplication类的声明等。
答案 1 :(得分:1)
除Steeves answer之外,您还可以将代码更改为
MainWindow *w = new MainWindow();
w->setAttribute(Qt::WA_DeleteOnClose);
w->show();
堆上的分配将阻止直接"释放"并且WA_DeleteOnClose确保在关闭Window时释放Memeory。
如果你想要一个你不知道范围的独立窗口,这是一个很好的方法。