C++ Qt-主屏幕上的QDialog选择混淆

C++ Qt-主屏幕上的QDialog选择混淆,c++,qt,qt4,qdialog,qtgui,C++,Qt,Qt4,Qdialog,Qtgui,我有以下Qt代码: int main(int argc, char *argv[]) { QApplication app(argc, argv); ChoosingDialog cdlg; if(!startWin.exec()) { // nothing chosen return 0; } if(cdlg.firstWindowSelected) { CFirstWindow wi

我有以下Qt代码:

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    ChoosingDialog cdlg;

    if(!startWin.exec())
    {
        // nothing chosen
        return 0;
    }

    if(cdlg.firstWindowSelected)
    {
        CFirstWindow win;
        win.show();

        return app.exec();
    }
    else
    {
        CSecondWindow win;
        win.show();

        return app.exec();
    }

}
这似乎是可行的,但在某些asm行中,它给了我一个关于“事件调度器清理”的错误。我尝试了一些技巧,我发现问题与app.exec()调用有关

更新: 如果我将这些行添加到ChoosingDialog(这是一个由Qt Creator自动生成的简单空白类)

我没有收到任何错误

原来我在QApplication之前使用的是“singleapplication”类。。共享内存锁出了问题


我一重新启动系统,异常就消失了。。。转炉。。你相信魔法吗?

我试过你的代码(用一个假选择对话框、CFistWindow和CSecondWindow),除了
startWin
应该是
cdlg
之外,我没有遇到任何错误。你能提供你的小部件的实现吗?我没有小部件,我有一个没有任何内容的QDialog类(默认由Qt Creator生成)和两个QMainWindows(但如果我没有构建它们的对象,也会发生错误)是的,startWin应该是cdlg。代码似乎很好。@Johnny:你能说出确切的错误吗?调用
exit()
听起来不是一个合适的解决方案。这里还有别的事情。我建议跟踪错误(特别是因为它只是一小段代码),而不是编写“变通方法”。
void ChoosingDialog ::closeEvent(QCloseEvent *)
{
    exit(1);
}