gpt4 book ai didi

c++ - QMainWindow 不会在条件 block 中打开

转载 作者:行者123 更新时间:2023-11-28 01:13:58 24 4
gpt4 key购买 nike

在打开 QMainWindow 之前发生登录,有 3 种可能的结果,一个错误,一个教师和一个用户,如果登录结果是用户必须打开一个 QMainWindow pro 用户,如果他是教师他的 QMainWindow。

    LoginDialog login;
login.exec();

switch(login.result()){

case LoginResult::NONE:
qDebug() << "None";
break;

case LoginResult::PROF:
qDebug() << "Prof";
break;

case LoginResult::USER:
{
MainWindow w;
w.show();
}
break;

case LoginResult::ERROR:
Database::Terminate();
return -1;

}

问题是,在外壳内,窗口只打开不到一秒钟就自动关闭,在开关外,窗口显示并保持应有的状态。

为什么会这样?

最佳答案

主窗口对象在 block 的末尾超出范围,并被销毁。您需要使用 new 创建它以防止出现这种情况:

case LoginResult::USER:
{
auto *w = new MainWindow;
w->setAttribute(Qt::WA_DeleteOnClose); // to prevent memory leak
w->show();
}

上面的指针变量 w 超出范围,但由于它是普通的原始指针,因此不会删除实际对象。将对象设置为在关闭时自行删除是 QWidget 的一项功能,也是确保主窗口被彻底删除的一种方法。不确定这是否适合您的应用程序,但您可以从它开始,然后在需要时再做其他事情。

关于c++ - QMainWindow 不会在条件 block 中打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59346088/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com