Qt中使用图表库
Qt中图表库QChart、QCustomPlot、Qwt简介
在Qt中使用图表,有以下几个选择:
1.QChart
QChart类是Qt中自带的图表类。
QChart 是 Qt Charts 模块的核心类,用于在 Qt 应用中创建和管理 2D 图表。它提供了一套高层次的 API,支持折线图、柱状图、饼图、散点图等多种常见图表类型,并内置了图例、坐标轴、动画、缩放、平移等交互功能。
1.1 核心特点
-
易于集成:作为 Qt 官方模块,QChart 与 Qt Widgets 和 Qt Quick 无缝结合,只需在
.pro
文件中添加QT += charts
即可使用。 -
丰富的图表类型:通过
QLineSeries
、QBarSeries
、QPieSeries
等子类,快速构建折线、柱状、饼图等图表。 -
交互与动画:内置缩放、平移、数据提示、主题切换及动画效果,无需额外开发即可实现专业级可视化体验。
-
跨平台支持:支持 Windows、macOS、Linux 及嵌入式平台,保证一致的显示与交互效果。
1.2 典型使用流程
- 创建
QChart
对象并设置标题。 - 创建数据系列(如
QLineSeries
)并添加数据点。 - 将系列添加到图表,调用
createDefaultAxes()
生成默认坐标轴。 - 使用
QChartView
显示图表,并启用抗锯齿等渲染优化。
2.QCustomPlot
QCustomPlot 是一个为 Qt 应用程序设计的开源 C++ 二维图表库,以“两文件即用”著称,广泛用于科研、工业监控、金融分析等需要高性能、实时、交互式数据可视化的场景。
2.1 核心定位
仅 2 个文件:qcustomplot.h
+ qcustomplot.cpp
即可加入现有 Qt 工程,零外部依赖。
Qt 专用:基于 QPainter/QWidget,支持 Qt5/Qt6,跨 Windows/Linux/macOS/嵌入式。
GPLv3 协议:开源免费,但闭源商用需购买商业授权。
2.2 主要能力
维度 | 支持情况 |
---|---|
图表类型 | 折线、散点、柱状、箱线、金融 K 线、热力图(Colormap)、统计直方图等 |
数据规模 | 经实测可流畅渲染 百万级数据点;可选 OpenGL 加速 |
坐标轴 | 无限多轴、对数轴、日期时间轴、反向轴;可自定义刻度/标签/颜色 |
图层管理 | 支持无限图层叠加,各层独立坐标系、可见性、Z 序 |
交互功能 | 鼠标滚轮缩放、框选放大、平移、数据点选取、图例拖拽、右键菜单 |
导出格式 | PNG/JPEG/BMP/PDF/SVG 矢量,支持高 DPI 打印 |
辅助元素 | 直线、曲线、箭头、文本、矩形、椭圆、无限线等 20+ 图元,可拖动 |
实时更新 | 提供 replot() /rescaleAxes() 接口,适合串口/网络数据流刷新 |
2.3 应用场景
实时串口示波器、传感器波形监控
科研实验数据采集与回放
金融行情K 线+成交量组合图
工业 HMI 多轴温度/压力曲线
教学演示函数绘图与动态参数调节.
3. Qwt (Qt Widgets for Technical Applications)
Qwt(Qt Widgets for Technical Applications)是一套基于 Qt 的 C++ 开源库,专为科学、工程与工业场景设计,提供二维图表、仪表盘、滑块、旋钮、刻度尺等现成控件,可快速搭建数据可视化与实时监控界面。
3.1 核心定位
- 纯 Qt 扩展:仅依赖 Qt Widgets,源码级跨平台(Win / Linux / macOS / 嵌入式)。
- LGPL 协议:闭源商用可动态链接,无需开源自己的程序。
- 与 Qt 版本同步:Qt4 → Qt5 → Qt6 均有对应分支,社区长期维护。
3.2 主要能力
维度 | 支持情况 |
---|---|
图表类型 | 折线、散点、柱状、阶梯、频谱图(Spectrogram)、热力图、极坐标、雷达图等 |
数据规模 | 十万级数据点流畅刷新;可自定义降采样策略 |
坐标轴 | 线性、对数、日期时间、自定义刻度引擎;支持多 X / Y 轴 |
仪表盘 | 圆盘、指南针、旋钮、滑块、温度计、旋钮输入,皮肤可完全自定义 |
实时刷新 | 信号槽驱动,可设置 FIFO 缓存,支持滚动、环形缓冲、自动重缩放 |
交互/导出 | 缩放、平移、选区、图例拖拽;可直接打印或导出 PNG / PDF / SVG |
自定义绘制 | 继承 QwtPlotItem 即可插入自己的图元,与官方元素共享坐标系 |
3.3 应用场景
- 工业 HMI:温控、压力、流量实时曲线
- 电子仪器:示波器、频谱仪、逻辑分析仪界面
- 科研实验:数据采集、离线分析、报告打印
- 嵌入式面板:Linux 工控屏、车载仪表、医疗监护仪