遇到错误:必须首先构造QGUIApplication

时间:2018-09-18 08:43:41

标签: c++ qt qthread qprocess qt5.9

我正在开发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();
}

1 个答案:

答案 0 :(得分:0)

问题的相关部分位于ApplicationManager.h内部,OP并未公开。

我敢打赌,它是QApplication(或QGUIApplicationQCoreApplication)的另一个实例。

我怎么知道这个?这部分是猜测(名称看起来像),部分是以下测试的结果:

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 

snapshot of 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库。

请注意,重点不是我做的。