Qt应用程序在退出时挂起(在QDialog执行后)

时间:2010-11-30 20:41:47

标签: c++ qt user-interface qt-creator

我正在使用Qt构建UI,我需要在主应用程序窗口之前显示一个对话框窗口,以便用户可以选择一些文件来加载这样的东西。 我得到的是一个相当简单的主要内容:

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    IView *view = new QtView();
    view->showView();
    int rc = a.exec();
    std::cout << "exit" << std::endl;
    return rc;
}

QtView类是IView接口的具体实现。 它还有mainwindow实例和QDialog实例。在view-&gt; showView()方法中,这就是我所拥有的:

void QtView::showView()
{
    this->_configDialog->exec();
    this->_mainAppWindow->show();
}

工作正常,对话框打开,当用户单击“确定”时,exec返回并显示主窗口。问题是,当我退出主窗口时,我得到一个僵尸进程,即使所有窗口都已关闭,应用程序似乎仍然挂起,我从未得到“退出”,我在主要返回之前在主要打印出来。 我不确定我做错了什么,但即使我点击十字架关闭对话框,主窗口打开,一旦关闭,整个事情就会挂在那里,我得到同样的结果。

如果有人有任何建议,那就太酷了。 感谢。

2 个答案:

答案 0 :(得分:2)

我解决了我的问题。 我使用QDialog中的accepted / rejected / finished(int)信号来触发主应用程序窗口上的show slot,并在对话框被接受时显示它。 无论如何,谢谢你的帮助。

答案 1 :(得分:0)

我认为这种行为的可能原因是您的配置对话框可能没有设置父窗口小部件(虽然您没有引用代码的相关部分,但这是盲目的猜测)。这是因为默认情况下QApplication只有在没有父项的所有 windows 都关闭时才会退出。事实上,对话框不是窗口,从技术上讲 - 它具有Qt :: Dialog窗口类型而不是Qt :: Window。这意味着任何关闭的“孤立”对话框仍然会阻止应用程序自动退出。

解决方案? 给父对话框或启用Qt :: WA_QuitOnClose属性:

this->_configDialog->setAttribute(Qt::WA_QuitOnClose);