C++ 如何在qml上绘制高性能形状
我想用QML开发一个桌面应用程序。该应用程序提供了一些绘图功能,如绘制直线、矩形、椭圆等。我发现有两种方法可以实现:C++ 如何在qml上绘制高性能形状,c++,qt,qml,C++,Qt,Qml,我想用QML开发一个桌面应用程序。该应用程序提供了一些绘图功能,如绘制直线、矩形、椭圆等。我发现有两种方法可以实现: 继承自QQuickPaintedItem并重新实现void Quick::paint(QPainter*painter) 直接在Canvas.onPaint中绘制形状 但我发现这两种实现都不如QWidget::paintEvent()快。从文档中可以看出,QQuickPaintedItem渲染是一个两步操作,直接使用场景图API通常要快得多。那么如何使用场景图API 要实现这一点
QQuickPaintedItem
并重新实现void Quick::paint(QPainter*painter)
Canvas.onPaint
中绘制形状李>
但我发现这两种实现都不如QWidget::paintEvent()
快。从文档中可以看出,QQuickPaintedItem
渲染是一个两步操作,直接使用场景图API通常要快得多。那么如何使用场景图API
要实现这一点?或者我应该使用
QWidget
,而不是QML
。以下是。您必须实现从QQuickItem
派生的自定义项,并使用scenegraphapi和OpenGL在其中实现图形。QML中没有更快的方法。@folibis您能给我看一个简单的例子,比如在QQuickItem::updatePaintNode
中用鼠标绘制椭圆吗?这个简单的例子可以在上面我的评论中的链接提供的Qt文档中找到。另外,不要忘记设置,否则您的项目将是“非可视的”。我建议您阅读如何实现自定义项。作为建议,您可以使用OpenGL进行绘图。但您必须实现基于QQuickFramebufferObject的类。但是对于您的任务来说,这可能有点过分。@folibis我继承自QQuickItem
,并在updatePaintNode
中绘制形状作为。性能与实现1相同。所以我认为这是因为另一个线程呈现的qml实现。我仍然找不到一种好方法,可以在一个updatePaintNode
中同时使用QSGGeometry
绘制不同的形状(椭圆、多边形、环..)。或者我应该将不同的形状实现为不同的QQuickItem
子类吗?