当前位置: 代码迷 >> QT开发 >> 封闭模式对话框后进程依然存在
  详细解决方案

封闭模式对话框后进程依然存在

热度:16   发布时间:2016-04-25 03:45:11.0
关闭模式对话框后进程依然存在
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的返回值来判断处理
  相关解决方案