Qt Graphs 2D+3D介绍

目录

一、核心定位与优势

[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(硬件加速、交互强)
相关推荐
实心儿儿6 小时前
Qt — Qt 事件
开发语言·qt
可爱系程序猿8 小时前
Unity 材质预览才弹 d3dcompiler_47.dll?先分清编辑器 SDK、着色器缓存和玩家包
程序人生·3d·unity·电脑·材质
bkspiderx12 小时前
Qt 的消息机制:事件驱动与信号槽的底层逻辑
开发语言·qt·信号槽·事件驱动·qt 的消息机制
江湖人称菠萝包14 小时前
【Qt】《Qt 5.9 C++开发指南》笔记-Chapter11-数据库
笔记·qt·qt5
励志不掉头发的内向程序员14 小时前
【从零写一个CAD 02】画完第一条线之后:实体容器、Esc 取消,和按了没反应的键盘
开发语言·c++·qt·学习·系统架构
Zldaisy3d14 小时前
从英特尔Connection苏州大会揭示算力狂飙下的散热范式革命,洞悉增材制造潜力重塑液冷散热版图
3d·制造
Quz19 小时前
QML TreeView:排序与搜索过滤
qt
Quz20 小时前
QML TreeView:基础树视图与自定义委托
qt
Junfeng的技术笔记1 天前
基于 C++/Qt 的雷达回波信号检测与测距仿真系统
qt
Quz1 天前
QML TableView:自定义样式与排序表格
qt