我尝试使用qApp-> exit()退出应用程序并关闭UI。但是在qApp-> exit()执行后,我仍然无法使用UI。任何人都可以帮助找出原因?非常感谢。
#include "clsDownloadUpdateList.h"
#include <QApplication>
#include <qtranslator.h>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTranslator translator;
translator.load("en-CN_upgrader");
qApp->installTranslator(&translator);
clsDownloadUpdateList w;
w.show();
return a.exec();
}
clsDownloadUpdateList::clsDownloadUpdateList(QWidget *parent) :
QMainWindow(parent),
_state(STOP),
ui(new Ui::clsDownloadUpdateList)
{
ui->setupUi(this);
this->setWindowTitle("GCS Upgrader");
// other code
// here comes the code to exit application
qApp->exit();
// but the UI is still there.
}
答案 0 :(得分:2)
@thuga是对的。您遇到的问题是由错误的代码引起的:您在构造函数中调用qApp->exit()
之前,您的应用程序尚未启动它的消息循环(a.exec()
)。
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTranslator translator;
translator.load("en-CN_upgrader");
qApp->installTranslator(&translator);
clsDownloadUpdateList w; // <- you call qApp->exit() right here, before a.exec();
w.show();
return a.exec();
}
答案 1 :(得分:1)
它对构造函数没有帮助,因为还没有启动事件循环。
在这种情况下,您可以使用QTimer :: singleShot(),超时等于零。它将导致在事件循环启动时调用所需的内容。最好使用初始化方法并在main中检查它:
Window w;
if ( !w.init() )
return 1;
w.show();
return a.exec();
答案 2 :(得分:0)
工作代码:
#include <QMetaObject>
//...
QMetaObject::invokeMethod(qApp, "quit",
Qt::QueuedConnection);
或小部件:
QMetaObject::invokeMethod(this, "close",
Qt::QueuedConnection);