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(硬件加速、交互强)
相关推荐
小鹏linux2 小时前
鸿蒙PC迁移:TupiTube Desk Qt 2D 动画工作室鸿蒙PC适配全记录
qt·华为·harmonyos
鸽芷咕2 小时前
鸿蒙PC迁移:LANDrop Qt 局域网传输工具鸿蒙PC适配全记录
qt·华为·harmonyos
Lhan.zzZ2 小时前
Qt Quick 嵌套 Dialog 与 ComboBox 层级混乱问题解决
c++·qt
森G2 小时前
67、Qt 多媒体框架概述---------多媒体
开发语言·qt
鸽芷咕2 小时前
鸿蒙PC迁移:MoonPlayer Qt 视频播放器鸿蒙PC适配全记录
qt·音视频·harmonyos
小鹏linux3 小时前
鸿蒙PC迁移:Phototonic Qt 图片查看器鸿蒙适配全记录:一次从 Widgets 桌面应用到 HAP 的迁移
qt·华为·harmonyos
knighthood20013 小时前
鸿蒙PC迁移:KeePassXC Qt 密码管理器鸿蒙PC适配全记录
qt·华为·harmonyos
luoyayun3613 小时前
Qt 中使用 QtConcurrent::run + QFutureWatcher 实现异步处理
qt·异步·qtconcurrent
CG_MAGIC4 小时前
3ds Max材质编辑器:精简模式与Slate模式对比
3d·编辑器·材质·贴图·uv·建模教程