Получение ошибки: сначала нужно создать приложение QGUIA - PullRequest
0 голосов
/ 18 сентября 2018

Я разрабатываю приложение с графическим интерфейсом, но всякий раз, когда я пытаюсь закрыть приложение, выдается сообщение об ошибке «Сначала необходимо создать 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();
}

1 Ответ

0 голосов
/ 18 сентября 2018

Соответствующая часть проблемы находится внутри 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 

snapshot of testQApp

При выходе из приложения возникает проблема:

QApplication::exec: Please instantiate the QApplication object first
Segmentation fault (core dumped)

$

Чтобы завершить это, соответствующий параграф док. о QApplication:

Для любого приложения с графическим интерфейсом, использующего Qt, существует точно один QApplication объект, независимо от того, имеет ли приложение 0, 1, 2 или более окон в любой момент времени. Для приложений Qt, отличных от QWidget , используйте взамен QGuiApplication , поскольку это не зависит от библиотеки QtWidgets .

Обратите внимание, что выделение не сделано мной.

...