Qt Graphs 三维概述
Qt Graphs 模块为学术研究和医疗等分析要求较高的行业提供了一种开发快速响应、复杂和动态三维图形的方法。Qt Graphs 提供三维条形图、散点图和曲面图。结合用户交互和实时三维绘图,可以创建有效利用空间的用户界面。在三维和二维表现形式之间切换,可以真正发挥三维在数据可视化方面的价值。
可以使用预定义的主题或定义新的主题来定制图形的外观和感觉。此外,还可以通过指定摄像机的设置来定制场景,并通过使用预定义或用户定义的网格来定制单个项目。
Qt Graphs Qt Visualization 提供现成的数据代理,可用于可视化来自 Qt 项目模型和高度图的数据。每种图形类型都有一个基本代理类型,可接受适合该图形格式的数据。更多信息,请参阅Qt Graphs Data Handling with 3D。
终端用户可以通过多种方式与图形显示的数据进行交互,包括旋转图形、放大和缩小数据、选择项目以及查看三维数据的二维切片以提高可读性。有关详细信息,请参阅Qt Graphs 在 3D 中与数据交互。
图形类型
Qt Graphs 模块提供以下三维图形类型:
Q3DGraphsWidgetItem 类为其子类Q3DBarsWidgetItem 、Q3DScatterWidgetItem 和Q3DSurfaceWidgetItem 提供了部件 API,这些子类实现了不同的图形类型:条形图、散点图和曲面图。图形类型决定了数据的呈现方式。
所有渲染都在QQuickGraphsItem
中进行,它继承了QQuick3DViewport
, 又通过QtQuick3D 提供了View3D 。它有自己的子类Bars3D 、Scatter3D 和Surface3D 。
三维条形图
三维条形图将数据显示为按类别分组的三维条形图。Q3DGraphsWidgetItem 类用于创建图形。QBar3DSeries 和QBarDataProxy 类用于为图形设置数据,并控制图形的可视属性,如绘制模式和阴影。在 QML 中,相应的类型是Bars3D,Bar3DSeries, 和BarDataProxy 。
更多信息,请参阅How to construct a minimal Q3DBarsWidgetItem graph 和简单条形图示例。
三维散点图
三维散点图以点集合或样条线的形式显示数据。Q3DScatterWidgetItem 类用于创建图形。QScatter3DSeries 或QSpline3DSeries 和QScatterDataProxy 类用于为图形设置数据和控制图形的可视属性。在 QML 中,相应的类型是Scatter3D,Scatter3DSeries,Spline3DSeries, 和ScatterDataProxy 。
更多信息,请参阅How to construct a minimal Q3DScatterWidgetItem graph 和简单散点图示例。
三维曲面图
三维曲面图以三维曲面图的形式显示数据。Q3DSurfaceWidgetItem 类用于创建图形。QSurface3DSeries 和QSurfaceDataProxy 类用于为图形设置数据和控制图形的可视属性。在 QML 中,相应的类型是Surface3D,Surface3DSeries, 和SurfaceDataProxy 。
更多信息,请参阅How to construct a minimal Q3DSurfaceWidgetItem graph 、Graph Gallery 和Surface Graph Gallery示例。
使用 OpenGL ES 渲染数据
Qt Graphs 基于 ,这意味着 使用目标平台的本地后端进行渲染。但是,如果 OpenGL ES2 最终被用于不支持 OpenGL ES3 或 Vulkan 等更高版本的目标中,则不支持以下功能:QtQuick3D Qt Graphs
- 体积对象,因为它们使用 3D 纹理
- 实例化,这意味着QtGraphs3D::OptimizationHint::Default 无法工作,而必须使用QtGraphs3D::OptimizationHint::Legacy 。
选择渲染模式
在 QML 中,你可以设置GraphsItem3D.RenderingMode 属性,决定图形是直接渲染在窗口背景上,还是渲染到屏幕外表面,然后在正常的 QML 项目渲染中绘制。
背景渲染模式比间接渲染模式性能稍好,但代价是非标准 QML 行为。例如,图形不支持抗锯齿。因此,改变渲染模式是一个性能与质量的问题。
Qt Quick 间接渲染模式使用专用场景图进行数据渲染,因此是图形渲染的最佳选择。
三维坐标轴
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 类型可创建添加到图形中的体积渲染对象。体绘制对象是一个带有三维纹理的方框。体支持三个切平面,沿体的每个主轴各一个。
QCustom3DLabel 类和Custom3DLabel QML 类型可使用指定的文本、字体、位置、缩放和旋转实现自定义标签。活动主题决定标签的颜色、边框和背景。
处理自定义输入
Qt Graphs QML 类实现了选择、旋转和缩放等典型操作的默认输入处理程序。要实现自定义输入处理程序而非默认处理程序,可覆盖必要的输入信号。
onTapped: { // Disable the default input handler unsetDefaultTapHandler() // Implement own custom event handler console.log("Custom tap event handler") }
© 2025 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.