• 783阅读
  • 0回复

QtGraphs [复制链接]

上一主题 下一主题
离线20091001753
 

只看楼主 倒序阅读 楼主  发表于: 2024-09-24
原文发布于2024年9月24日
https://www.qt.io/blog/qtgraphs

QtGraphs 模块将 2D 和 3D 数据可视化集成到一个包中,有效地取代了 Qt 5 早期推出的旧版 QtCharts 和 QtDataVisualization 模块。通过组合这些模块,用户可以更直观、更方便地找到适合其所有数据可视化需求的模块。

渲染方面的改进
当创建 3D 数据可视化模块时,Qt 还没有如今的复杂图形抽象和 3D 渲染引擎。因此,专门为 QtDataVisualization 创建了一个定制的 OpenGL 渲染引擎。渲染引擎需要与使用 OpenGL ES 2 的设备配合使用,因此缺乏现代 OpenGL 功能,例如实例渲染。此外,由于渲染引擎使用 OpenGL,因此 Ui 组件也需要使用 OpenGL。强制应用程序使用 OpenGL 会导致在具有更好图形替代方案的平台上性能不佳,例如 Windows 上的 Direct3D。QtGraphs 的 3D 方面不仅限于 OpenGL,因为它使用 Quick3D 来可视化图形。QtCharts 与 Widget 框架高度耦合,因为它使用了图形视图框架。这通常意味着使用软件渲染解决方案。但是,由于 QtGraphs 在 Quick 框架上运行,因此 2D 图形使用硬件加速渲染。

3D 数据 API 的变更
QtDataVisualization 和 QtGraphs 之间的变更不仅仅是在幕后,因为数据 API 已经进行了重大的重新设计。旧 API 需要为新数据数组分配堆。但是现在,所有数据都可以在堆栈中分配,并且使用移动语义来避免不必要地复制数据。除了这些 API 变更之外,代理的使用现已明确。在 QtDataVisualization 中,代理包含提供给系列的数据。但是,代理不应保存数据,而应充当传递数据的中间层。在 QtGraphs 中,数据仍传递给代理,但它们会立即将其提供给系列,而不是存储它。

小部件支持
QtGraphs 仍可与 QtDataVisualization 等小部件一起使用。但是,存在一些差异。由于 Quick3D 使用快速渲染基础结构,因此应使用 QQuickWidgets 而不是普通的 QWidgets。当 QtGraphs 在 TP 中时,每个图形都继承自 QQuickWidget。但是,该设计不是最优的,因为它对小部件框架产生了硬依赖。因此,设计被更改为使用组合而不是继承。

相互作用
QtGraphs 保留了与 QtDataVisualization 相同的 3D 图形交互方法,但其实现已大大简化。以前,QtDataVisualization 使用 QAbstract3DInputHandler、QInput3DHandler 和 QTouch3DInputHandler。现在,只有一个类 QGraphsInputHandler,它整合了所有快速输入处理程序。虽然 QtCharts 将事件从 QuickItem 转换为图形场景事件,但 QtGraphs 中的 2D 端现在可以直接使用来自 QQuickItem 的事件。

新功能
QtGraphs3D 与 QQuick3D 一起实现,从而实现一些新功能。例如能够将其他 QQuick3D 元素集成到图形中。使用 importScene 属性,我们可以将任何模型、灯光、粒子发射器和反射探测器的集合添加到图形场景中。同样,我们还可以扩展场景环境以使用色调映射模式、后期处理效果或天空盒等。这可以实现一些有趣的场景。

3D 图形性能
借助 QtGraphs,我们齐心协力提升了所有 3D 图形类型的性能。对于条形图和散点图,我们现在可以利用 QtQuick3D 提供的模型实例化功能来高效显示大量条形图或点。QtGraphs 仍然支持非实例化渲染,可以使用optimizationHint:Legacy 属性启用此功能。对于表面图,我们已将顶点定位任务转移到顶点着色器,从而利用 GPU 的功能完成此操作。

未来发展
QtGraphs 将继续开发,并且已在考虑新的请求功能。例如,虽然可以将 3D 元素嵌入图形中,但目前还无法将图形嵌入 QQuick3D 场景中。参数样条渲染是另一个已在开发中的请求功能。对于 2D,即将推出的一项功能是可以更改 x 轴显示在图形的顶部还是底部。同样,y 轴可以从左向右更改。
(づ ̄ 3 ̄)づ
快速回复
限100 字节
 
上一个 下一个