QtCreator 新建 Qt Quick Application - Empty ,默认的 Qt Quick 工程中使用的是QGuiApplication
#include <QGuiApplication>
#include <QQmlApplicationEngine>
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
const QUrl url(QStringLiteral("qrc:/main.qml"));
QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
&app, [url](QObject *obj, const QUrl &objUrl) {
if (!obj && url == objUrl)
QCoreApplication::exit(-1);
}, Qt::QueuedConnection);
engine.load(url);
return app.exec();
}
qml中使用ChartView后,程序会启动不起来,莫名其妙崩溃,并且不会报告什么原因。
pro 工程文件中加入 QT += charts qml quick 也还是崩溃。
需要将QGuiApplication替换成QApplication。 原因可能是ChartView使用了QWidget的一些实现。而QGuiApplication中并不至此QWidget。他们的区别大致如下。
QGuiApplication和QApplication的区别
QGuiApplication 和QApplication是Qt框架中用于管理应用程序的两个类,它们在功能和应用场景上有所不同。
继承关系
QApplication是QGuiApplication的子类,而QGuiApplication又是QCoreApplication的子类。这意味着QApplication继承了QGuiApplication和QCoreApplication的所有功能。
功能和应用场景
-
QCoreApplication:用于没有图形界面的应用程序,提供了一个非GUI的事件循环。
-
QGuiApplication:用于有图形界面的应用程序,但不使用QWidget,只使用QML实现。它提供了额外的GUI相关设置,比如桌面设置、风格、字体、调色板、剪切板和光标等。
-
QApplication:用于使用QWidget的应用程序,或者QML与QWidget混合使用的应用程序。它包含了QGuiApplication的所有功能,并增加了与QWidget相关的功能,比如设置双击间隔、按键间隔、拖拽距离和时间、滚轮滚动行数等。
选择使用
-
如果你的应用程序是无界面的,直接使用QCoreApplication。
-
如果你的应用程序有图形界面,但不使用QWidget,只使用QML,使用QGuiApplication。
-
如果你的应用程序使用QWidget,或者QML与QWidget混合使用,使用QApplication。