如何画线 - 不在 Canvas 上,只是对象?

How to draw line - not on Canvas, just object?

我正在将我的游戏移植到 QML 并且有一个困难。看这张图:

三角形是精灵,线条是力向量。我可以在 QML 中显示精灵,但我不明白如何绘制矢量。它的长度可以大于精灵大小。

我想我可以使用 Rectangleheight 的 1px,但我不知道如何旋转它。

力在每一帧都可能发生变化,因此绘图性能必须良好。

如果您不想使用 Canvas,有几个选项:

  • 实现 QQuickPaintedItem - 它使用 QPainter API 来绘制 QML 项目。最简单的解决方案,但如果您进行大量绘图,效率不高。

  • 实现自定义 QQuickItem - 它更复杂,你将不得不实现额外的东西,但它会更快,因为它将使用场景图 API,所以您的渲染将得到优化

  • 使用Qt3D模块,虽然它是用于3d图形的,但它也可以进行2d绘图。

最后,显然你可以通过创建一个非常窄和宽的 Rectangle 并给它一些旋转来画一条线。但这是一个非常笨拙的解决方案。我建议您研究第二个选项,并检查一些示例,使用自定义几何体和着色器实现 QQuickItemHere is one similar example.

更新: 从 Qt 5.10 开始,还有 qml Shape 元素,它提供了一种定义矢量形状的声明方式,IMO 是在 qml 中拥有参数化图形的最简单方式。缺点是性能不是很好,但如果你不涉及过多的元素,它仍然可以完美使用。