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(硬件加速、交互强)
相关推荐
陈天伟教授4 小时前
eDrawings 2026 x64 Edition-免费 3D 模型和 2D 工程图查看器
3d
小短腿的代码世界6 小时前
Qt Bluetooth源码深度解析:从HCI协议到跨平台API的完整架构
开发语言·qt·架构
小短腿的代码世界6 小时前
Qt WebEngine多进程架构与IPC通信:从Chromium多进程到Qt信号槽融合
qt·架构·系统架构
尘中远8 小时前
【Qwt 7.0 系列】快速入门与核心新特性概览 —— 更现代的 Qt 数据可视化库
qt·数据可视化·绘图·qwt·科学绘图
初阳78510 小时前
【Qt】系统相关(3)——多线程
qt
初阳78513 小时前
【Qt】系统相关(2)——文件
开发语言·qt
尘中远1 天前
【Qwt 7.0 系列】坐标轴与刻度系统 —— 刻度引擎、网格、图例与刻度朝内
qt·数据可视化·qcustomplot·qwt·工业软件·科学绘图
sycmancia1 天前
Qt——多线程间的互斥
开发语言·qt
Tian_Hang1 天前
eclipse ditto 学习笔记
运维·服务器·开发语言·javascript·3d
尘中远1 天前
【Qwt 7.0 系列】常用图表类型实战 —— 柱状图、散点图、箱线图与直方图
qt·qwt·工业软件·科学绘图