Qt 3D图概述
Qt图库模块提供了一种快速开发针对分析要求高的行业如学术研究和医疗行业的快速响应、复杂和动态3D图的形式。Qt图库提供了3D柱状图、散点图和表面图。通过用户交互和实时3D绘图图,可以使界面空间利用更加有效。在3D和2D展示之间切换可以使真正利用3D在数据可视化中的价值。
可以通过使用预定义的主题或定义新的主题来定制图表的外观和感觉。此外,还可以通过指定投影仪设置来定制场景,通过使用预定义或用户定义的网格来定制单个项目。
Qt图库提供了可用于从Qt项目模型和高度图可视化数据的数据代理。每种图表类型都有一个基本代理类型,它接受适合该图表的格式的数据。有关更多信息,请参阅使用3D的Qt图库数据管理。
最终用户可以通过旋转图表、放大和缩小数据、选择项目以及查看3D数据的2D切片等多种方式与图表展示的数据进行交互。有关更多信息,请参阅在3D中与Qt图库数据交互。
图表类型
Qt图库模块提供了以下3D图表类型
QAbstract3DGraph类继承自QQuickWidget,并为其实现不同图表类型的子类提供了一个基于QtQuick3D的渲染器:Q3DBars、Q3DScatter和Q3DSurface。图表类型决定了数据如何展示。
3D柱状图
3D柱状图将数据呈现为按类别分组的3D柱状图。Q3DBars类用于创建图表,而QBar3DSeries和QBarDataProxy类用于将数据设置到图表中,以及控制图表的视觉属性,例如绘制模式和阴影。在QML中,相应的类型是Bars3D、Bar3DSeries和BarDataProxy。
有关更多信息,请参阅如何构建一个最小的Q3DBars图表,以及简单的柱状图示例。
3D散点图
3D散点图将数据呈现为点集。使用Q3DScatter类创建图表,使用QScatter3DSeries和QScatterDataProxy类将数据设置到图表中,以及控制图表的视觉属性。在QML中,相应的类型是Scatter3D、Scatter3DSeries和ScatterDataProxy。
有关更多信息,请参阅如何构建最小Q3DScatter图表和简单散点图示例。
3D表面图
3D表面图将数据呈现为三维表面图。使用Q3DSurface类创建图表,使用QSurface3DSeries和QSurfaceDataProxy类将数据设置到图表中,以及控制图表的视觉属性。在QML中,相应的类型是Surface3D、Surface3DSeries和SurfaceDataProxy。
有关更多信息,请参阅如何构建最小Q3DSurface图表、图形画廊和表面图画廊示例。
使用OpenGL ES进行数据渲染
由于Qt Graphs基于QtQuick3D,它将自动使用目标平台的本地后端进行渲染。但是,如果目标平台不支持OpenGL ES2以上的任何内容,如OpenGL ES3或Vulkan,则以下功能不支持:
- 体积对象,因为它们使用3D纹理
- 实例化,即QAbstract3DGraph::OptimizationHint::Default不起作用,而必须改用QAbstract3DGraph::OptimizationHint::Legacy。
选择渲染模式
在QML中,您可以将AbstractGraph3D.RenderingMode属性设置为确定图表是否会直接在窗口背景上渲染,或者渲染到一个然后在正常QML项目渲染期间绘制的后置表面上。
背景渲染模式比间接渲染模式提供略好的性能,但代价是非标准QML行为。例如,图表不支持抗锯齿。因此,更改渲染模式是性能和质量的权衡问题。
Qt Quick使用专用的场景图进行数据渲染,因此是图表的最佳选择。
三维坐标轴
Qt Graphs支持以下坐标轴类型
- 值轴
- 类别轴
可以设置坐标轴以显示线条或网格。这两种坐标轴类型都是QAbstract3DAxis类或AbstractAxis3D QML类型的特殊化。
值轴可以指定值范围以及将范围划分的段和次段计数。标签绘制在每次段之间。网格线绘制在每次段和每次次段之间。值轴使用QValue3DAxis类或ValueAxis3D QML类型实现。
类别轴具有命名范围和可调整的范围宽度。它根据由轴范围定义的数据窗口大小分成等大小的类别。如果提供,标签将绘制到类别位置。如果可见,则在类别之间绘制网格线。类别轴是用QCategory3DAxis类或CategoryAxis3D QML类型实现的。
如果未明确为图表设置轴,则创建具有无标签的临时默认轴。可以通过轴访问器修改这些默认轴,但一旦为特定方向设置了轴,该方向的默认轴就会被销毁。
所有图表类型都支持同时显示多个系列。所有系列不需要包含相同数量的行和列。除非为行和列轴显式定义,否则行标签和列标签都是从添加的第一个序列中获取的。
可以使用轴格式化器来自定义值轴网格线和标签。类QValue3DAxisFormatter和QML类型ValueAxis3DFormatter为线性值3D轴提供格式化规则。类QLogValue3DAxisFormatter和QML类型LogValueAxis3DFormatter为对数值3D轴提供格式化规则。
可以通过设置polar属性来使用极坐标水平轴进行表面和散点图。它也可以用于条形图,但这样做将产生警告并被忽略。
3D主题
主题是一组应用于图表所有视觉元素的UI样式相关设置内置集合,例如元素的色彩、字体和可见性,以及光和环境的强度。
Qt Graphs附带以下预定义主题,可以用作自定义主题的基础
- Qt是一种浅色主题,以其绿色为基础色。
- 原色是一种浅色主题,以其黄色为基础色。
- 石头苔藓是一种中等深色主题,以其黄色为基础色。
- 军蓝是一种中等浅色主题,以其蓝色为基础色。
- 复古是一种中等浅色主题,以其棕色为基础色。
- 乌木是一种深色主题,以其白色为基础色。
- 艾西贝尔是一种深色主题,以其黄色为基础色。
- 用户定义是默认主题,旨在进行自定义。有关更多信息,请参阅Default Theme。
也可以从零开始创建自定义主题。
如果图表显示来自多个数据系列的多个数据系列,则可以分别为每个系列指定一些设置。例如,可以为图表的各个图层指定不同的渐变,以使其看起来更逼真。有关示例,请参阅Surface Graph Gallery。
自定义3D场景
由于Qt Graphs建立在QtQuick3D之上,因此可以将QtQuick3D场景集成到Qt Graphs场景中。有关更多信息,请参阅Qt Graphs与Qt Quick 3D集成指南。
自定义项
Qt图形有预定义的网格类型用于条形图和散点图项。网格类型决定了在图中条形图或散点图项的外观。除了预定义的网格外,还可以指定用户定义的几何形状作为网格文件。有关更多信息,请参阅QAbstract3DSeries::userDefinedMesh。为了更多样,可以为网格旋转设置四元数。
除了自定义单个项外,还可以使用QCustom3DItem类或Custom3DItem QML类型将自定义项添加到图中。这些项具有自定义网格、位置、缩放、旋转以及可选的纹理。
可以使用QCustom3DVolume类和Custom3DVolume QML类型创建用于添加到图的体渲染对象。体渲染对象是一个带有3D纹理的盒子。支持体积的三个切片平面,每个平面沿体积的每个主轴一个。
使用QCustom3DLabel类和Custom3DLabel QML类型实现具有指定文本、字体、位置、缩放和旋转的自定义标签。标签颜色、边框和背景由活动主题确定。
© 2024 Qt公司有限公司。本文件中包含的文档贡献归其各自所有者所有。本文件所提供的文档根据自由软件基金会发布的GNU自由文档许可版本1.3的条款进行许可。Qt及其相应标志是芬兰的Qt公司及其在全球的子公司和关联公司的商标。所有其他商标均为其各自所有者的财产。