Я разрабатываю приложение с графическим интерфейсом, но всякий раз, когда я пытаюсь закрыть приложение, выдается сообщение об ошибке «Сначала нужно создать 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();
}
Соответствующая часть проблемы находится внутри 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
Составлено и протестировано в cygwin64 в Windows 10:
$ qmake-qt5 testQApp.pro
$ make
$ ./testQApp
Когда я закрываю приложение, возникает проблема:
QApplication::exec: Please instantiate the QApplication object first
Segmentation fault (core dumped)
$
Чтобы сделать это полным, соответствующий параграф док. около QApplication
:
Для любого приложения с графическим интерфейсом, использующего Qt, точно один QApplication объект, независимо от того, имеет ли приложение 0, 1, 2 или более окон в любой момент времени. Для неQWidget основанные на Qt приложения, используйте QGuiApplication вместо этого, поскольку это не зависит от QtWidgets библиотека.
Пожалуйста, обратите внимание, что подчеркивание не сделано мной.
Других решений пока нет …