利用Qt的charts模块绘制曲线、饼图、柱状图、折线图等各种图表

2024-10-09 23:31   重庆  

一、前言

Qt Charts模块是Qt提供的一个用于创建各种类型图表的功能模块。为开发人员提供了一种简单而强大的方式来可视化数据。Qt Charts模块基于Qt GUI框架构建,可以与其他Qt模块无缝集成,例如Qt Widgets、Qt Quick和Qt OpenGL。

Qt Charts模块包含了几个核心类:

(1)QChart:表示一个图表对象,可以通过添加一个或多个系列(QAbstractSeries)来在图表上显示数据。QChart提供了设置标题、轴、图例等属性的方法。

(2)QAbstractSeries:抽象基类,表示一个系列对象,用于在图表上显示数据。具体的系列类包括QBarSeries(条形图)、QLineSeries(折线图)、QScatterSeries(散点图)等。每个系列可以包含一个或多个数据点(QAbstractSeriesData),并与一个x轴和一个y轴关联。

(3)QAbstractSeriesData:抽象基类,表示一个数据点对象。不同类型的系列使用不同的数据点类,例如QBarSet(条形图中的一个条形集合)和QLineSeriesData(折线图中的一个数据点)。

(4)QAbstractAxis:抽象基类,表示一个坐标轴对象。具体的轴类包括QValueAxis(值轴)、QBarCategoryAxis(条形图的类别轴)等。轴用于定义图表上的坐标系,并提供设置最小值、最大值、刻度间隔等属性的方法。

(5)QLegend:表示图表的图例对象,用于显示不同系列的标签。图例可以设置为可见或隐藏,并提供对齐方式、布局等控制。

除了上面提到的核心类之外,Qt Charts还提供了一些辅助类和函数,用于帮助处理图表数据和样式的设置,例如QChartView(显示图表的视图类)、QChartGlobal(全局设置类)、QChartTheme(图表主题类)等。

使用Qt Charts模块可以实现各种常见的图表类型,如折线图、条形图、饼图、散点图等,同时还支持自定义图表样式和交互操作。开发人员可以通过简单的API调用来创建和配置图表,并可以根据需要添加动画效果、交互式工具提示等功能。

下面介绍 Qt Charts模块可以绘制的几种经典类型图表以及应用的场景:

(1)折线图(Line Chart):用于显示数据随时间或其他连续变量的变化趋势。通过连接数据点形成一条折线来表示数据的变化。

(2)条形图(Bar Chart):用于比较不同类别或组之间的数据大小。每个类别或组使用一个垂直/水平的条形来表示其对应的数据值。

(3)饼图(Pie Chart):用于展示数据在整体中的占比关系。数据以扇形的形式呈现,扇形大小表示数据所占的比例。

(4)散点图(Scatter Chart):用于展示两个变量之间的关系,适合探索数据的分布和趋势。

(5)区域图(Area Chart):类似于折线图,但通过填充折线下方的区域来表示数据的范围或累积值。

(6)雷达图(Radar Chart):用于比较多个变量在不同维度上的大小。多个变量通过从中心点延伸的射线表示,并在射线上标记对应的数值。

除了这些经典图表类型,Qt Charts还支持 箱线图(Boxplot)、气泡图(Bubble Chart)、范围图(Range Chart)等。


折线图:


曲线图:


柱状图:


饼状图:


K线图:



二、QChart模块安装与使用

2.1 模块安装介绍

Qt Charts模块在Qt安装的时候默认没有随Qt框架一起安装,因为Qt Charts模块属于Qt的一个扩展模块,不属于Qt核心功能的一部分。除了Qt Charts模块之外,Qt官方还提供了许多其他的扩展模块,以满足各种不同的应用需求,Qt Charts只是其中之一。

Qt Charts模块相对较为庞大且可能不是所有使用Qt的开发者都需要使用图表功能,所以Qt官方将其作为可选模块提供。这样做可以减小Qt框架的体积,简化库的维护和更新。


我当前使用的Qt版本是QT5.12.6。下载地址:https://download.qt.io/archive/qt/5.12/5.12.6



安装的时候,要勾选Qt Charts模块。


2.2 引用模块

(1)安装之后,新建工程之后,在Qt的项目文件里要添加Qt Charts模块的引用。

QT       += charts


(2)在类头文件里声明命名空间。

QT_CHARTS_USE_NAMESPACE

Qt Charts模块的类和函数都定义在QtCharts命名空间内,在使用时需要加上命名空间前缀,例如:

QtCharts::QChartView *chartView = new QtCharts::QChartView(chart);

这样做是正常的写法,但是编不方便,代码会显得比较冗长。

为了简化代码,可以使用QT_CHARTS_USE_NAMESPACE宏来引入QtCharts命名空间,例如:

#include <QtCharts/QChartView>

QT_CHARTS_USE_NAMESPACE

QChartView *chartView = new QChartView(chart);

这样就可以直接使用QChartView类了,无需再加上命名空间前缀。QT_CHARTS_USE_NAMESPACE宏的作用相当于在文件顶部加上以下代码:

using namespace QtCharts;



2.3 新建工程示例


DS小龙哥 嵌入式技术资讯
不定时更新STM32、物联网、linux驱动、QT等技术文章;打造嵌入式开发相关知识分享、技术交流平台
 最新文章