1

Canvas在 QML 中Rectangle使用 OpenGL 绘制旋转。这是代码:

//...
property variant points: []

onPointsChanged:{
    canvas.requestPaint();
}

//...

Canvas{
    //...

    onPaint:{
        var ctx = canvas.getContext('2d')

        ctx.clearRect(0,0, width, height);
        ctx.beginPath()
        ctx.strokeStyle = 'red'
        ctx.lineWidth = 3

        for(var i = 0; i < points.length; i++){
            var p1 = convertPoint(points[i])
            if(i == 0){
                ctx.moveTo(p1.x, p1.y)
                continue
            }

            ctx.lineTo(p1.x, p1.y)
        }
        ctx.stroke()
        ctx.restore()
    }

    function convertPoint(p){
        var x = p.x * width;
        var y = p.y * height;
        return Qt.point(x,y);
    }
}

在 c++ 代码中有 4 个点计数,每 30ms 发送到 qml。问题是在MinGW下编译时,这个绘制操作占用了50%的CPU使用率,而在MSVC2010下编译时,这个操作占用了17%的CPU,这仍然很多。这是一些错误还是什么不好?

4

1 回答 1

4

如果性能至关重要,请考虑使用新的场景图类。Canvas特别是,您会对QSGGeometryNode类感兴趣。如果您更喜欢CanvasAPI 的简单性,则必须了解它的最佳使用方式。本文让您对此有所了解。

编辑:在某些情况下,我还发现使用QQuickPaintedItem类对嵌入式硬件(特别是 Raspberry Pi)进行了改进。

于 2013-11-04T11:35:11.083 回答