本页内容

Qt Graphs 3D概述

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

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

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

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

图表类型

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

Q3DGraphsWidgetItem 类为其子类Q3DBarsWidgetItem 、Q3DScatterWidgetItem 和Q3DSurfaceWidgetItem 提供了控件API,这些子类分别实现了不同的图表类型:条形图、散点图和表面图。图表类型决定了数据的呈现方式。

所有渲染操作均在QQuickGraphsItem 中进行,该类继承自QQuick3DViewport ,而 又通过QtQuick3D 提供View3D 。它还拥有自己的子类,包括Bars3D 、Scatter3D 和Surface3D 。

3D条形图

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

3D条形图,其中绿色条形高度各不相同

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

3D 散点图

3D 散点图将数据呈现为一组点或样条曲线。使用Q3DScatterWidgetItem 类来创建图表。QScatter3DSeries 、QSpline3DSeries 和QScatterDataProxy 类用于向图表设置数据并控制图表的视觉属性。在 QML 中,相应的类型分别为Scatter3D 、Scatter3DSeries 、Spline3DSeries 和ScatterDataProxy 。

带有绿色球体的3D散点图

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

3D 曲面图

3D 曲面图将数据以 3D 曲面图的形式呈现。使用Q3DSurfaceWidgetItem 类来创建图表。QSurface3DSeries 和QSurfaceDataProxy 类用于向图表设置数据并控制图表的视觉属性。在 QML 中,相应的类型分别为Surface3D 、Surface3DSeries 和SurfaceDataProxy 。

带有倾斜绿色平面的3D曲面图

有关更多信息,请参阅How to construct a minimal Q3DSurfaceWidgetItem graph 以及“Graph Gallery”和“Surface Graph Gallery”示例。

使用 OpenGL ES 进行数据渲染

Qt Graphs 基于QtQuick3D ,这意味着Qt Graphs 使用目标平台的原生后端进行渲染。但是,如果最终在不支持更高版本(如 OpenGL ES3 或 Vulkan)的目标平台上使用了 OpenGL ES2,则不支持以下功能:

选择渲染模式

在 QML 中,您可以设置GraphsItem3D.RenderingMode 属性来确定图表是直接渲染在窗口背景上,还是渲染到一个离屏表面上,然后在正常的 QML 项渲染过程中将其绘制出来。

背景渲染模式的性能略优于间接渲染模式,但代价是 QML 行为会偏离标准。例如,图不支持抗锯齿。因此,更改渲染模式需要权衡性能与质量。

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

3D 坐标轴

Qt Graphs 支持以下坐标轴类型:

  • 数值轴
  • 类别轴

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

对于值轴,您可以设置数值范围以及用于划分该范围的段数和子段数。默认情况下,标签会绘制在每个段之间。默认情况下,网格线会绘制在每个段和每个子段之间。值轴通过QValue3DAxis 类或Value3DAxis QML类型实现。

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

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

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

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

通过设置polar 属性,可在曲面图和散点图中使用极坐标水平轴。该属性也可用于柱状图,但设置后会触发警告且该设置将被忽略。

自定义 3D 场景

由于Qt Graphs 是基于QtQuick3D 构建的,因此可以将QtQuick3D 场景集成到Qt Graphs 场景中。有关更多信息,请参阅Qt Graphs 与Qt Quick 3D 的集成。

自定义项目

Qt Graphs 为条形图和散点图控件提供了预定义的网格类型。网格类型决定了条形图或散点图在图表中的显示效果。您还可以指定自定义几何图形作为网格文件。有关更多信息,请参阅QAbstract3DSeries::userDefinedMesh()。为了获得更多变化,可以设置四元数来控制网格旋转。

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

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

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

处理自定义输入

Qt Graphs 实现了针对选择、旋转和缩放等典型操作的默认输入处理程序。若要使用自定义输入处理程序代替默认实现,请重写必要的输入信号。

onTapped: {
    // Disable the default input handler
    unsetDefaultTapHandler()
    // Implement own custom event handler
    console.log("Custom tap event handler")
}

© 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.