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 迁移

  • 类名替换:QChartQGraphQChartViewGraphsView
  • 序列类名基本不变(QLineSeries 等),命名空间改为 QtGraphs
  • 渲染性能显著提升,大数据场景必迁Qt

2. 选型决策

  • 新项目(Qt6):优先 Qt Graphs(2D+3D 统一、性能强、官方维护)
  • 仅 2D 且简单:可继续用 QtCharts(但已弃用)
  • 实时大数据 / 工业监控:QCustomPlot(2D 性能极致)
  • 3D 科学可视化:Qt Graphs 3D(硬件加速、交互强)
相关推荐
蓝速科技29 分钟前
蓝速科技 3D 全息舱 AI 数字人一体机全尺寸选型实测指南
人工智能·科技·3d
秋田君2 小时前
QT_网络编程体系
网络·arm开发·qt
Quz2 小时前
QML TextArea 实战(下):大文本加载与性能优化
qt
Quz2 小时前
QML TextArea 实战(中):Markdown 渲染与保持滚动
qt
C++ 老炮儿的技术栈18 小时前
基于Qt实现轻量化本地音乐播放器
开发语言·c++·qt·c·播放器·音乐
雨田哥1 天前
3D 数字人的成长养成记
3d·数字人·3d数字人·陪伴·数伴·成长养成·3d数伴
我不是疯子是傻子1 天前
Qt 实时曲线卡顿优化:从QPainter到OpenGL的3级加速实战
开发语言·qt
秋田君1 天前
QT_XML文件操作
xml·数据库·qt
我不是疯子是傻子1 天前
串口通信数据帧粘包拆包再进化:基于 Qt 的滑动窗口与 CRC 校验实战
开发语言·qt
程序员老陆1 天前
Qt中实现窗口真全屏(覆盖Windows任务栏)
开发语言·windows·qt