我在QML中使用Canvas
来使用OpenGL绘制旋转Rectangle
。这是代码:
//...
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下编译时,占用CPU的17%,这仍然很多。这是一些错误或什么是坏的?
答案 0 :(得分:4)
如果性能至关重要,请考虑使用new scene graph classes代替Canvas
。特别是,你对QSGGeometryNode课感兴趣。如果您更喜欢Canvas
API的简单性,您必须了解它的最佳使用方式。 This article让您对此有所了解。
编辑:在某些情况下,我还发现使用QQuickPaintedItem类的嵌入式硬件(特别是Raspberry Pi)有所改进。