1

我有一个奇怪的 qt 问题:我的应用程序在某些配置中没有退出。

这个想法是有一个程序,它可以作为带有 GUI 的程序(通过myWindow)或作为纯控制台应用程序(通过控制myConsole,它在其线程中运行自己的循环以记录键盘输入)启动。无论哪种方式退出都是通过调用myObjectslot来完成的quitMyObject,它反过来清理一些对象并发出signalQuitapplication连接到QApplication( app)quit槽的信号。

不幸的是,应用程序仅在启用窗口并在控制台中输入退出命令时退出(尽管 总是调用slotQuitMyObject of )。myObject所以我想知道 Qt 有什么标准才能真正退出主事件循环并退出程序。

代码如下所示:

int main(int argc, char *argv[])

{

    bool enableWindow = false;
    QApplication app(argc, argv, enableWindow);
    MyUiAbstract* myConsole = new ConsoleUi(); // ConsoleUi inherits from MyUiAbstract, which inherits from QThread
    MyWindow* myWindow = NULL; // MyWindow inherits from QMainWindow
    if(enableWindow)
    {
        myWindow = new MyWindow();
        myWindow->show();
    }

     MyObject* myObject = new MyObject(myConsole, myWindow, ...); 

     QObject::connect(myObject, SIGNAL(signalQuitQApplication()), &app, SLOT(quit()), Qt::QueuedConnection);

     QObject::connect(myConsole, SIGNAL(signalQuitMyObject()), myObject, SLOT(slotQuitMyObject()), Qt::QueuedConnection);
     QObject::connect(myWindow, SIGNAL(signalQuitMyObject()), myObject, SLOT(slotQuitMyObject()), Qt::QueuedConnection);
     QObject::connect(myWindow, SIGNAL(signalQuitConsoleUI()), myConsole, SLOT(slotQuitMyUi()), Qt::QueuedConnection);

     return app.exec();
} 
4

1 回答 1

-1

尝试在您的 MyConsole 类中使用该代码:

#include <QApplication>
...
qApp->quit();

您还需要在退出之前关闭所有事件循环和线程。

于 2012-08-13T18:47:54.393 回答