Qt 5让QQuickItem在不使用QPainter的情况下绘制椭圆

时间:2014-04-06 00:54:48

标签: c++ qt qtquick2

我使用Qt 4.8做了一个项目,并使用QDeclarativeItem并使用QPainter的drawEllipse方法绘制圆圈。

现在,在Qt5中,我似乎真的找不到办法。 在从qt4到qt5的移植指南中,他们说使用QSG *类,但我找不到用它们中的任何一个绘制省略号的方法。我想要看的两个是:QSGSimpleRectNodeQSGGeometry,但没有什么......

有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分:1)

使用QSG *类是正确的。它比QPainter API要棘手得多,因为它们基本上是围绕OpenGL的浅层包装器,而OpenGL并没有对圆形,曲线等进行原生处理。

这样做的方法是使用C ++实现的自定义QML项,方法是继承QQuickItem,然后使用自定义绘图覆盖其updatePaintNode函数。

虽然您不必自己实际管理所有OpenGL缓冲区,但您必须将数据发送到OpenGL"服务器" (GPU)通过指定要绘制的点(及其颜色等)对于曲线,这是相当费力的,因为OpenGL中的曲线通常由许多短线或一系列点表示。 Here is on example. And here is another.

填充的椭圆或圆圈将由许多三角形代表。

我不知道您的需求程度,但在OpenGL中使用外部制作的圆形图像(精灵),然后在OpenGL中操纵其位置,大小,比例等,往往要容易得多。您也可以在QtQuick中执行此操作,尽管该技术通常与使用updatePaintNode不同,后者用于自定义绘图,而不是图像操作(通常)。