我有一个奇怪的 qt 问题:我的应用程序在某些配置中没有退出。
这个想法是有一个程序,它可以作为带有 GUI 的程序(通过myWindow
)或作为纯控制台应用程序(通过控制myConsole
,它在其线程中运行自己的循环以记录键盘输入)启动。无论哪种方式退出都是通过调用myObject
slot来完成的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();
}