本页内容

Qt Data Visualization 概述

Qt Data Visualization 模块为学术研究和医疗等对分析能力要求较高的行业,提供了一种开发响应迅速、复杂且动态的3D可视化解决方案。Qt 3D 数据可视化功能提供 3D 柱状图、散点图和曲面图等可视化效果。通过结合用户交互与实时 3D 绘图可视化,可以创建有效利用空间的用户界面。在 3D 和 2D 呈现模式之间切换,能够真正发挥 3D 在数据可视化中的价值。

可通过使用预定义主题或定义新主题来自定义图表的外观和风格。此外,可通过指定摄像机设置来自定义场景,并可使用预定义或用户自定义的网格来自定义单个项目。

Qt Data Visualization 提供现成的数据代理,可用于可视化来自 Qt 项模型和高度图的数据。每种图表类型都有一个基本代理类型,该类型接受适合该可视化形式的数据格式。有关更多信息,请参阅Qt Data Visualization 数据处理。

最终用户可以通过多种方式与图表呈现的数据进行交互,包括旋转图表、对数据进行缩放、选择项目,以及查看 3D 数据的 2D 切片以提高可读性。有关更多信息,请参阅Qt Data Visualization 数据交互。

注意: 自 Qt 6.10 起,Qt Data Visualization 模块 已被废弃。对于新项目,请改用 Qt Graphs 模块。Qt Graphs 利用各平台的原生渲染后端(macOS 上的 Metal、Windows 上的 DirectX、Linux 上的 OpenGL 或 Vulkan)来实现 2D 和 3D 图表的硬件加速渲染。 若要从Qt Data Visualization 迁移至Qt Graphs 模块,请参阅Qt Graphs 《从Qt DataVisualization迁移》或Qt Academy课程《迁移至Qt Graphs 》。

图表类型

Qt Data Visualization 模块提供了以下3D图表类型:

QAbstract3DGraph类继承自QWindow ,并为其实现不同图表类型的子类(Q3DBars、Q3DScatter和Q3DSurface)提供渲染循环。图表类型决定了数据的呈现方式。

3D 条形图

3D 条形图将数据以按类别分组的 3D 条形形式呈现。Q3DBars 类用于创建图表,而 QBar3DSeries 和 QBarDataProxy 类则用于向图表设置数据,以及控制图表的视觉属性(如绘制模式和着色)。 在 QML 中,对应的类型是 Bars3D、Bar3DSeries 和 BarDataProxy。

简约的3D条形图,在网格状的底面上排列着五根高度各异的绿色条形

有关更多信息,请参阅How to construct a minimal Q3DBars graph 以及“简单条形图”示例。

3D 散点图

3D 散点图将数据呈现为一组点。Q3DScatter 类用于创建图表,QScatter3DSeries 和 QScatterDataProxy 类用于向图表设置数据,以及控制图表的视觉属性。 在 QML 中,相应的类型是 Scatter3D、Scatter3DSeries 和 ScatterDataProxy。

一个极简的3D散点图,其中三个绿色球体位于一个线框网格框内

有关更多信息,请参阅How to construct a minimal Q3DScatter graph 以及简单散点图示例。

3D 曲面图

3D 曲面图将数据以 3D 曲面图的形式呈现。 Q3DSurface 类用于创建图表,而 QSurface3DSeries 和 QSurfaceDataProxy 类则用于向图表设置数据,以及控制图表的视觉属性。在 QML 中,相应的类型是 Surface3D、Surface3DSeries 和 SurfaceDataProxy。

一个简约的3D曲面图,显示了覆盖在网格地面上的绿色折叠山脊曲面

有关更多信息,请参阅How to construct a minimal Q3DSurface graph 、图表图库以及曲面图表图库示例。

使用 OpenGL 进行数据渲染

建议使用 OpenGL 2.1 或更高版本进行数据渲染。如果使用 OpenGL ES2(包括 Windows 中的 Angle 构建版本),则不支持以下功能:

  • 阴影
  • 抗锯齿
  • 曲面的平面着色
  • 体积对象(因其使用 3D 纹理)

软件渲染器仅支持 OpenGL ES2 模拟(即使用QCoreApplication::setAttribute(Qt::AA_UseSoftwareOpenGL) 时)。

选择渲染模式

在 QML 中,您可以设置AbstractGraph3D.RenderingMode 属性来确定图形是直接渲染在窗口背景上,还是渲染到一个离屏表面上(随后在常规 QML 项渲染过程中进行绘制)。

背景渲染模式的性能略优于间接渲染模式,但代价是 QML 行为会偏离标准。例如,图表不会遵循 QML 项的 z 轴排序,且无法实现部分透明。因此,更改渲染模式涉及性能与质量之间的权衡。

Qt Quick 使用专用的场景图进行数据渲染,因此是数据可视化的最佳选择。

3D 坐标轴

Qt Data Visualization 支持以下坐标轴类型:

  • 数值轴
  • 类别轴

轴可设置为显示线条或网格。这两种轴类型都是 QAbstract3DAxis 类或 AbstractAxis3D QML 类型的特化形式。

值轴可以指定一个值范围,以及用于将该范围划分的段数和子段数。标签绘制在每个段之间。网格线绘制在每个段与每个子段之间。值轴通过 QValue3DAxis 类或 ValueAxis3D QML 类型实现。

类别轴具有命名范围和可调节的范围宽度。它会根据轴范围定义的数据窗口大小,被划分为大小相等的类别。如果提供了标签,则会在类别位置绘制标签。如果网格线可见,则会在类别之间绘制网格线。 类别轴通过 QCategory3DAxis 类或 CategoryAxis3D QML 类型实现。

如果未为图表显式设置任何坐标轴,则会创建没有标签的临时默认坐标轴。这些默认坐标轴可通过坐标轴访问器进行修改,但一旦为特定方向显式设置了任何坐标轴,该方向的默认坐标轴即被销毁。

所有图表类型均支持同时显示多个系列。各系列无需包含相同数量的行和列。行和列标签取自首个添加的系列,除非已为行轴和列轴显式定义了标签。

可以使用坐标轴格式化器来自定义数值坐标轴的网格线和标签。 QValue3DAxisFormatter 类和 ValueAxis3DFormatter QML 类型为线性值 3D 坐标轴提供格式化规则。QLogValue3DAxisFormatter 类和 LogValueAxis3DFormatter QML 类型为对数值 3D 坐标轴提供格式化规则。

通过设置polar 属性,可在曲面图和散点图中使用极坐标水平轴。

3D 主题

主题是一组内置的 UI 样式相关设置集合,适用于图表的所有视觉元素,例如元素的颜色、字体和可见性,以及光线和环境光的强度。

Qt Charts 自带以下预定义主题,可作为自定义主题的基础:

  • Qt是一种以绿色为基色的浅色主题。
  • “主色调”是一种以黄色为基色的浅色主题。
  • Digia是一款以灰色为基色的浅色主题。
  • Stone moss是一种中等深色主题,以黄色为基色。
  • “Army blue”是一款以蓝色为基色的中等浅色主题。
  • Retro是一种以棕色为基色的中等浅色主题。
  • “乌木”是一种以白色为基色的深色主题。
  • Isabelle是一种以黄色为基色的深色主题。
  • “用户自定义”是默认主题,旨在供用户自定义。有关更多信息,请参阅Default Theme 。

您还可以从头开始创建自定义主题。

如果一个图表显示了来自多个数据序列的数据,则可以针对每个序列分别指定某些设置。例如,可以为图表的不同图层指定不同的渐变,使其看起来更逼真。示例请参见“曲面图库”。

自定义 3D 场景

3D 场景通过 Q3DScene 类或 Scene3D QML 类型实现。 一个场景包含一个活动摄像机(由 Q3DCamera 类或 Camera3D 类型实现)和一个活动光源(由 Q3DLight 类或 Light3D 类型实现)。光源的位置始终与摄像机相关联。默认情况下,光源位置会自动跟随摄像机移动。

可以通过指定摄像机的预设位置、旋转角度和缩放级别来自定义摄像机。示例请参见《简单的散点图》。

自定义项目

Qt Data Visualization 为条形、项目和曲面预定义了网格类型。网格类型决定了条形、项目或曲面在图表中的外观。用户定义的网格可指定为 Wavefront OBJ 几何定义文件。为了获得更多变化,可以设置四元数来控制网格旋转。

除了自定义单个项目外,还可以使用 QCustom3DItem 类或 Custom3DItem QML 类型将自定义项目添加到图表中。这些项目具有自定义网格、位置、缩放、旋转以及可选的纹理。

QCustom3DVolume 类和 Custom3DVolume QML 类型可用于创建体积渲染对象并将其添加到图表中。体积渲染对象是一个带有 3D 纹理的盒子。该体积支持三个切片平面,分别沿体积的每个主轴方向各一个。

QCustom3DLabel 类和 Custom3DLabel QML 类型可实现自定义标签,支持指定文本、字体、位置、缩放和旋转。标签的颜色、边框和背景由当前主题决定。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.