Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在qml上绘制高性能形状_C++_Qt_Qml - Fatal编程技术网

C++ 如何在qml上绘制高性能形状

C++ 如何在qml上绘制高性能形状,c++,qt,qml,C++,Qt,Qml,我想用QML开发一个桌面应用程序。该应用程序提供了一些绘图功能,如绘制直线、矩形、椭圆等。我发现有两种方法可以实现: 继承自QQuickPaintedItem并重新实现void Quick::paint(QPainter*painter) 直接在Canvas.onPaint中绘制形状 但我发现这两种实现都不如QWidget::paintEvent()快。从文档中可以看出,QQuickPaintedItem渲染是一个两步操作,直接使用场景图API通常要快得多。那么如何使用场景图API 要实现这一点

我想用QML开发一个桌面应用程序。该应用程序提供了一些绘图功能,如绘制直线、矩形、椭圆等。我发现有两种方法可以实现:

  • 继承自
    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
    子类吗?