0

我正在开发一个 GUI 应用程序,但是每当我试图关闭应用程序时,它都会抛出“必须先构造 QGuiapplication”的错误。我的 main 没有返回退出代码 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();
}
4

1 回答 1

0

问题的相关部分在ApplicationManager.hOP没有暴露的内部。

我敢打赌,它会产生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 

testQApp 的快照

当我退出应用程序时,会出现问题:

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

$

为了使这一点完整,doc.的相关段落。关于QApplication

对于任何使用 Qt 的 GUI 应用程序,只有一个 QApplication对象,无论应用程序在任何给定时间是否有 0、1、2 或更多窗口。对于非基于QWidget的 Qt 应用程序,请改用QGuiApplication,因为它不依赖于QtWidgets库。

请注意,强调不是我做的。

于 2018-09-18T11:16:10.837 回答