int main(int argc, char *argv[])
{
QApplication a(argc, argv);
LoginDialog L;
L.setModal(false);
L.show();
int res=L.exec();
if(res==QDialog::Accepted)
{
MainWindow w;
w.show();
}
return a.exec();
}
代码如上,我希望在LoginDialog 完成登录,登录成功后才创建MainWindow, 现在发现直接关闭LoginDialog 后在任务管理其里进程依然存在
想问一下,这个流程一般该如何处理
------解决方案--------------------
else {
QTimer::singleShot(500, qApp, SLOT(quit()));
}
------解决方案--------------------
L.setAttribute(Qt::WA_DeleteOnClose);
------解决方案--------------------
你的代码问题有些问题,我们先看QDialog的exec源代码
int QDialog::exec()
{
Q_D(QDialog);
...
setAttribute(Qt::WA_ShowModal, true);
...
show();
...
QEventLoop eventLoop;
(void) eventLoop.exec(QEventLoop::DialogExec);
...
}
所以你上面的L.setModal(false);L.show();这些代码是无意义的
另外,我们再看QApplication::exec()的代码
int QCoreApplication::exec()
{
...
QEventLoop eventLoop;
int returnCode = eventLoop.exec();
...
return returnCode;
}
你在main函数里面加了2个QEventLoop的循环,等于两个死循环,QDialog的exec没有return出来,肯定一直阻塞住了
建议,将return a.exec();改成return res;
或者在LoginDialog内部处理登陆时间,而不是通过exec的返回值来判断处理