Qt Creator中,针对Quick项目使用ChartView导致程序崩溃

482 阅读1分钟

@TOC

A.问题描述:

1.在Qt creator中新建Quick项目,使用ChartView会导致程序崩溃?无法运行?[转Step 1]
2.如何在Qt Quick工程中使用ChartView?[转Step 1]
3.如何在Qt Quick工程中使用QtCharts绘图? [转Step 0]

B.问题本质:

Qt Quick - Qt模块的特定应用场景

  • 相关类的继承关系:
    QApplication <- QGuiApplication <- QCoreApplication <- QObject(根父类)
    QChartView <- QGraphicsView <- QAbstractScrollArea <- QFrame <- QWidget <- (QObject and QPaintDevice)
  • 相关类的功能描述:
    -- QCoreApplication 定义在core模块中,为应用程序提供了一个非gui的事件循环;
    -- QGuiApplication 定义在gui模块中,提供了额外的gui相关的设置,比如桌面设置,风格,字体,调色板,剪切板,光标;
    -- QApplication 定义在widgets模块中,是QWidget相关的,能设置双击间隔,按键间隔,拖拽距离和时间,滚轮滚动行数等,能获取桌面,激活的窗口,模式控件,弹跳控件等。 -
  • 相关类的应用场景:
    -- QCoreApplication 适用于 无界面的应用程序;
    -- QGuiApplication 适用于 含有gui相关(但没有使用widgets模块)的应用程序;
    -- QApplication 适用于 含有gui相关 且 使用widgets相关(比如QChartview) 的应用程序;

其中 QCoreApplication 最轻量; QApplication 包含的功能最多,也就最笨重;QGuiApplication 介于两者之间。到 Qt5.8 开始,支持用到什么模块,加载什么模块,尽量使得编译后的 程序轻量化。

C.问题解决:

演示版本(其他 操作系统 可以参考一下):

  • Windows10
  • Qtcreater 4.11.1 / Qt 5.14.1

解决步骤 :

Step 0 问题展示

0.1 创建 Qt Quick 应用程序
0 创建工程.png
0.2 打开 main.qml
1.创建工程.png 0.3 插入代码片段,运行即可发现出现提示信息 The program has unexpectedly finished.

import QtCharts 2.3
.
.
.
ChartView {
        title: "this is title"
    }

1 引入chartview 问题出现.png
0.4 附录:记得在Pro文件加入 charts模块
3.添加 charts.png

Step 1 查看 main.cpp 是否包含头文件 QApplication ▼

2.更改前.png 若未包含,将头文件包含一下即可,如下图所示:
2.更改后.png

改动内容:
1.在 main.cpp 包含 #include <QApplication>  
2.QGuiApplication app(argc, argv); 修改为  QApplication app(argc, argv);  

参考
0.Qml-and-qt-quick>
1.QML入门----设计器详解
2.Qt-multimedia-in-qt-6
3.Qt Blog
4.chartview-crash-when-launching-on-mobile-qt-qml-error
5.踏雪Alfred Qt blog

可以肯定的是学海无涯,这篇文章也会随着对 Qt 的深入学习而持续更新, 欢迎各位在评论区留言进行探讨交流。