我正在开发GUI应用程序,但是每当我尝试关闭该应用程序时,它都会引发错误“必须首先构造QGuiapplication”。我的主要任务是不返回退出代码0,所以它没有正常退出。我认为某些析构函数被调用了两次,但这里需要一些帮助。我在这里附加main.cpp代码以供参考。
#include <QGuiApplication>
#include <QFontDatabase>
#include <QtWebEngine>
#include "ApplicationManager.h"
#include "AppLogger.h"
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QCoreApplication::setAttribute(Qt::AA_UseOpenGLES);
QGuiApplication app(argc, argv);
QtWebEngine::initialize();
app.setApplicationName("MCS3.0");
QFontDatabase::addApplicationFont(":/Fonts/Roboto.ttf");
#ifdef VERSION
app.setApplicationVersion(QString("%1").arg(VERSION));
logInfoMessage(app.applicationName()+app.applicationVersion()+" Started");
#endif
ApplicationManager::instance().run();
return app.exec();
}
答案 0 :(得分:0)
问题的相关部分位于ApplicationManager.h
内部,OP并未公开。
我敢打赌,它是QApplication
(或QGUIApplication
或QCoreApplication
)的另一个实例。
我怎么知道这个?这部分是猜测(名称看起来像),部分是以下测试的结果:
testQApp.cc
:
#include <QtWidgets>
int main(int argc, char **argv)
{
QApplication app(argc, argv);
{ QApplication app(argc, argv);
QLabel qLbl("The app in app");
qLbl.show();
app.exec();
}
return app.exec();
}
testQApp.pro
:
SOURCES = testQApp.cc
QT = widgets
已在Windows 10的cygwin64中进行了编译和测试:
$ qmake-qt5 testQApp.pro
$ make
$ ./testQApp
当我退出应用程序时,会出现问题:
QApplication::exec: Please instantiate the QApplication object first
Segmentation fault (core dumped)
$
要完成此操作,请参阅doc的相关段落。关于QApplication
:
对于使用Qt的任何GUI应用程序,无论应用程序在任何给定时间有0、1、2或更多窗口,都精确地存在一个 QApplication对象。对于基于非QWidget的Qt应用程序,请改用QGuiApplication,因为它不依赖于QtWidgets库。
请注意,重点不是我做的。