Qt 数据可视化概述

Qt 数据可视化模块提供了一种快速响应、复杂和动态 3D 可视化的方式,适用于学术研究、医疗等行业。Qt 3D 数据可视化提供 3D 条形图、散点图和表面可视化。结合用户交互和实时 3D 绘制可视化,可以创建有效利用空间的用户界面。在 3D 和 2D 展示之间切换,才能真正利用 3D 可视化数据的优势。

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

Qt 数据可视化提供了预制数据代理,可用于从 Qt 项目模型和高度图可视化数据。每个图表类型都有一个基本代理类型,可以接受适合该可视化的数据格式。有关更多信息,请参阅 Qt 数据可视化数据处理

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

图表类型

Qt 数据可视化模块提供以下 3D 图表类型:

QAbstract3DGraph 是类 QWindow 的子类,为其实例的子类提供渲染循环,这些子类实现不同的图表类型:Q3DBarsQ3DScatterQ3DSurface。图表类型决定了数据如何呈现。

3D 条形图

3D 条形图以按类别分组的 3D 条形的形式呈现数据。使用类 Q3DBars 创建图表,使用类 QBar3DSeriesQBarDataProxy 设置图表数据,以及控制图表的视觉属性,例如绘制模式和阴影。在 QML 中,相应的类型是 Bars3DBar3DSeriesBarDataProxy

有关更多信息,请参阅 如何构建最小的 Q3DBars 图表简单的条形图 示例。

3D 散点图

3D散点图将数据呈现为点集合。使用Q3DScatter类来创建图表,使用QScatter3DSeriesQScatterDataProxy类将数据设置到图表中,以及控制图表的视觉效果。在QML中,对应的类型是Scatter3DScatter3DSeriesScatterDataProxy

有关更多信息,请参阅如何构建一个最小的Q3DScatter图表,以及简单的散点图示例

3D曲面图

3D曲面图将数据呈现为3D曲面图。使用Q3DSurface类来创建图表,使用QSurface3DSeriesQSurfaceDataProxy类将数据设置到图表中,以及控制图表的视觉效果。在QML中,对应的类型是Surface3DSurface3DSeriesSurfaceDataProxy

有关更多信息,请参阅如何构建一个最小的Q3DSurface图表图表库曲面图库示例。

使用OpenGL进行数据渲染

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

  • 阴影
  • 抗锯齿
  • 表面的平面着色
  • 体积对象,因为它们使用3D纹理

对于软件渲染器(即使用QCoreApplication::setAttribute(Qt::AA_UseSoftwareOpenGL)),仅提供OpenGL ES2的模拟。

选择渲染模式

在QML中,您可以设置AbstractGraph3D.RenderingMode属性以确定图表是否将直接渲染在窗口背景上,或渲染到然后进行正常QML项目渲染的离屏表面。

背景渲染模式比间接渲染模式的性能略好,但以非标准QML行为为代价。例如,图表不遵循QML项的z顺序,并且它们不能部分透明。因此,更改渲染模式是一个性能与质量的问题。

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

3D坐标轴

Qt数据可视化支持以下轴类型:

  • 值轴
  • 类别轴

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

值轴可以给定一个值的范围和段和子段的数量,将范围分割。标签在每个段之间绘制。网格线在每个段和每个子段之间绘制。值轴由QValue3DAxis类或ValueAxis3D QML类型实现。

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

如果为图形未显式设置轴,则创建带有无标签的临时默认轴。可以通过轴访问器修改这些默认轴,但一旦为特定方向设置了一个轴,该方向的默认轴就会被销毁。

所有图形类型都支持同时显示多个序列。所有序列不需要包含相同数量的行和列。除非显式为行和列轴定义标签,否则将取第一个添加的序列的行和列标签。

轴格式化程序可用于自定义值轴网格线和标签。《a href="qvalue3daxisformatter.html" translate="no">QValue3DAxisFormatter类和《a href="qml-qtdatavisualization-valueaxis3dformatter.html" translate="no">ValueAxis3DFormatter QML类型为线性值3D轴提供格式化规则。《a href="qlogvalue3daxisformatter.html" translate="no">QLogValue3DAxisFormatter类和《a href="qml-qtdatavisualization-logvalueaxis3dformatter.html" translate="no">LogValueAxis3DFormatter QML类型为对数值3D轴提供格式化规则。

可以通过设置polar属性来使用水平极坐标轴进行表面和散点图。

3D主题

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

QtCharts附带以下预定义主题,可将其用作自定义主题的基础:

  • Qt是一个浅色主题,其基准色为绿色。
  • 主色是一个浅色主题,其基准色为黄色。
  • Digia是一个浅色主题,其基准色为灰色。
  • 石苔是一种中等暗色调主题,其基准色为黄色。
  • 军蓝是一种中等浅色调主题,其基准色为蓝色。
  • 复古是一种中等浅色调主题,其基准色为棕色。
  • 黑檀木是一种暗色调主题,其基准色为白色。
  • 伊莎贝尔是一种暗色调主题,其基准色为黄色。
  • 用户定义是默认主题,旨在进行自定义。有关更多信息,请参阅默认主题

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

如果图形显示多个数据序列的数据,则可以为每个序列指定一些单独的设置。例如,可以指定不同的渐变来表示图形的各层,使其看起来更真实。例如,请参阅《a href="qtdatavis3d-qmlsurfacegallery-example.html" translate="no">表面图形库。

自定义3D场景

3D场景通过使用《a href="q3dscene.html" translate="no">Q3DScene类或《a href="qml-qtdatavisualization-scene3d.html" translate="no">Scene3D QML类型实现。场景包含一个活动相机,通过使用《a href="q3dcamera.html" translate="no">Q3DCamera类或《a href="qml-qtdatavisualization-camera3d.html" translate="no">Camera3D类型实现,以及一个活动光源,通过使用《a href="q3dlight.html" translate="no">Q3DLight类或《a href="qml-qtdatavisualization-light3d.html" translate="no">Light3D类型实现。光源始终位于与相机相关的位置。默认情况下,光源位置会自动跟随相机。

可以通过指定预设的位置、旋转和缩放级别来定制相机。例如,请参阅简单的散点图

自定义项

Qt数据可视化预定义了条形图、项和曲面的网格类型。网格类型决定了条形图、项或曲面在图上的外观。用户定义的网格可以指定为Wavefront OBJ几何定义文件。为了获得更多的多样性,可以设置四元数以进行网格旋转。

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

QCustom3DVolume类和Custom3DVolume QML类型可以用来创建要添加到图中的体渲染对象。体渲染对象是一个带有3D纹理的盒子。体积支持三个切片平面,每个平面沿着体积的主轴。

QCustom3DLabel类和Custom3DLabel QML类型实现具有指定文本、字体、位置、缩放和旋转的自定义标签。标签颜色、边框和背景由活动主题决定。

© 2024 Qt公司有限公司。本文件中的文档贡献的版权属于其各自的所有者。提供的文档受免费软件基金会发布的GNU自由文档许可(FDL)版本1.3的条款许可。Qt及其相关标志是芬兰和其他国家/地区的Qt公司商标。所有其他商标均为其各自所有者的财产。