目录
[1. 替代关系](#1. 替代关系)
[2. 关键升级](#2. 关键升级)
[3. 模块引入](#3. 模块引入)
[二、2D 图表(Qt Graphs 2D)](#二、2D 图表(Qt Graphs 2D))
[1. 支持类型(全覆盖 QtCharts)](#1. 支持类型(全覆盖 QtCharts))
[2. 核心类(C++)](#2. 核心类(C++))
[3. 2D 特点](#3. 2D 特点)
[三、3D 图表(Qt Graphs 3D)](#三、3D 图表(Qt Graphs 3D))
[1. 支持类型(3D 全覆盖)](#1. 支持类型(3D 全覆盖))
[2. 核心类(C++ Widget 版)](#2. 核心类(C++ Widget 版))
[3. 3D 关键技术(性能核心)](#3. 3D 关键技术(性能核心))
[4. 3D 交互能力](#4. 3D 交互能力)
[四、2D vs 3D 架构对比](#四、2D vs 3D 架构对比)
[五、代码示例(极简 2D 折线 + 3D 曲面)](#五、代码示例(极简 2D 折线 + 3D 曲面))
[1. 2D 折线图(C++)](#1. 2D 折线图(C++))
[2. 3D 曲面图(QML)](#2. 3D 曲面图(QML))
[1. 从 QtCharts 迁移](#1. 从 QtCharts 迁移)
[2. 选型决策](#2. 选型决策)
Qt Graphs 是 Qt 6.8+ 推出的新一代统一可视化模块 ,合并了旧的 QtCharts(2D)与 QtDataVisualization(3D),底层基于 QRhi/Qt Quick 3D 硬件加速 ,主打高性能 2D+3D、统一架构、Widget/QML 双支持Qt。
一、核心定位与优势
1. 替代关系
- 取代:Qt Charts(2D,已弃用) + Qt DataVisualization(3D)
- 适用:Qt 6.8+,未来官方主推;Qt5 不可用Qt
2. 关键升级
- ✅ 2D+3D 统一模块:一套库搞定所有图表
- ✅ 硬件加速(QRhi):支持 DirectX/Metal/OpenGL/Vulkan,大数据更流畅
- ✅ 性能飞跃:2D 十万点、3D 百万级数据流畅渲染
- ✅ Widget + QML 双接口:兼顾传统桌面与现代触控 UI
- ✅ 嵌入式友好:可单独编译仅 2D 或仅 3D,减小体积Qt
3. 模块引入
qmake
# qmake
QT += graphs
cmake
# CMake
find_package(Qt6 REQUIRED COMPONENTS Graphs)
target_link_libraries(xxx PRIVATE Qt6::Graphs)
二、2D 图表(Qt Graphs 2D)
1. 支持类型(全覆盖 QtCharts)
- 折线图 :
QLineSeries/LineSeries(QML) - 曲线图 :
QSplineSeries/SplineSeries - 柱状图 :
QBarSeries+QBarSet/BarSeries - 饼图 / 甜甜圈图 :
QPieSeries+QPieSlice/PieSeries - 面积图 :
QAreaSeries/AreaSeries - 散点图 :
QScatterSeries/ScatterSeriesQt




2. 核心类(C++)
QGraph:图表容器(替代 QChart)GraphsView:2D 视图(替代 QChartView)- 坐标轴:
QValueAxis(数值)、QBarCategoryAxis(类别)、QDateTimeAxis(时间)
3. 2D 特点
- 渲染更快:无 GraphicsView 开销,直接 QRhi 渲染
- 交互增强:缩放、平移、hover 提示、选点
- 主题系统:内置明暗主题,支持自定义配色
- 无缝集成 QML:可与 Qt Quick 控件混合使用Qt
三、3D 图表(Qt Graphs 3D)
1. 支持类型(3D 全覆盖)
- 3D 柱状图 :
Q3DBars/Bars3DSeries - 3D 散点图 :
Q3DScatter/Scatter3DSeries - 3D 曲面图 :
Q3DSurface/Surface3DSeries(支持高度图、热力图)Qt



2. 核心类(C++ Widget 版)
Q3DBarsWidgetItem:3D 柱状图Q3DScatterWidgetItem:3D 散点图Q3DSurfaceWidgetItem:3D 曲面图Q3DGraphsWidget:3D 容器(嵌入 Widget 界面)Qt
3. 3D 关键技术(性能核心)
- GPU 实例化渲染:百万级 3D 散点 / 柱子,一次 Draw Call 完成,CPU 占用极低
- 顶点着色器位移:曲面图高度数据用纹理传输,GPU 实时计算顶点,CPU 零负担
- 材质与光照:支持自定义材质、透明度、光照模型、阴影
- 相机控制:自由旋转、缩放、平移,支持正交 / 透视投影Qt
4. 3D 交互能力
- 鼠标拖拽旋转、滚轮缩放、右键平移
- 点击选中数据项、显示详情
- 3D 数据 2D 切片查看(便于分析)Qt
四、2D vs 3D 架构对比
表格
| 维度 | Qt Graphs 2D | Qt Graphs 3D |
|---|---|---|
| 底层渲染 | QRhi(2D 硬件加速) | Qt Quick 3D + QRhi |
| 数据量 | 十万级流畅 | 百万级流畅(实例化) |
| 适用场景 | 报表、仪表盘、实时曲线 | 科学可视化、地形、3D 数据探索 |
| 集成方式 | Widget/Quick 均可 | 优先 QML,Widget 有封装 |
| 典型控件 | GraphsView | Q3DGraphsWidget |
五、代码示例(极简 2D 折线 + 3D 曲面)
1. 2D 折线图(C++)
cpp
运行
#include <QApplication>
#include <QMainWindow>
#include <QtGraphs>
using namespace QtGraphs;
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
QMainWindow w;
w.resize(800, 600);
// 2D 折线序列
QLineSeries *series = new QLineSeries();
series->append(0, 10); series->append(1, 20); series->append(2, 15);
// 图表容器
QGraph *graph = new QGraph();
graph->addSeries(series);
graph->setTitle("Qt Graphs 2D 折线图");
graph->createDefaultAxes();
// 视图
GraphsView *view = new GraphsView(graph);
w.setCentralWidget(view);
w.show();
return a.exec();
}
2. 3D 曲面图(QML)
qml
import QtQuick.Window 2.15
import QtGraphs 6.8
Window {
width: 800; height: 600; visible: true
Surface3D {
anchors.fill: parent
title: "Qt Graphs 3D 曲面图"
Surface3DSeries {
heightMap: TextureSource { source: "heightmap.png" }
meshResolution: Qt.size(100, 100)
}
}
}
六、迁移与选型建议
1. 从 QtCharts 迁移
- 类名替换:
QChart→QGraph,QChartView→GraphsView - 序列类名基本不变(
QLineSeries等),命名空间改为QtGraphs - 渲染性能显著提升,大数据场景必迁Qt
2. 选型决策
- 新项目(Qt6):优先 Qt Graphs(2D+3D 统一、性能强、官方维护)
- 仅 2D 且简单:可继续用 QtCharts(但已弃用)
- 实时大数据 / 工业监控:QCustomPlot(2D 性能极致)
- 3D 科学可视化:Qt Graphs 3D(硬件加速、交互强)