[Interest] Qml Canvas is too slow

Alexander Dyagilev alervdvcw at gmail.com
Thu Oct 31 17:42:52 CET 2019


Hello,

The following code is too slow (paint operation takes few seconds):

Canvas{

id:map

width:columnsCount*rectangleSize

height:rowsCount*rectangleSize

anchors.horizontalCenter:alignCenter?parent.horizontalCenter:undefined

anchors.left:alignCenter?undefined:parent.left

anchors.bottom:parent.bottom

propertyintoffset:1

onPaint:drawMap()

functiondrawMap(){

if(columnsCount===0||rowsCount===0){

return;

}

varmap=downloadProgressMap.map();

varctx=getContext("2d");

for(vari=0;i<map.length;i++){

varx=(i%columnsCount)*rectangleSize;

vary=(Math.floor(i/columnsCount))*rectangleSize;

if(map[i]){

drawFillRect(ctx,x,y);

}else{

drawClearRect(ctx,x,y);

}

}

}

functiondrawFillRect(ctx,x,y){

ctx.fillStyle=appWindow.theme.progressMapFillBorder

ctx.fillRect(x+offset,y+offset,rectangleSize-offset*2,rectangleSize-offset*2);

ctx.fillStyle=appWindow.theme.progressMapFillBackground

ctx.fillRect(x+offset+1,y+offset+1,rectangleSize-(offset+1)*2,rectangleSize-(offset+1)*2);

}

functiondrawClearRect(ctx,x,y){

ctx.fillStyle=appWindow.theme.progressMapClearBorder

ctx.fillRect(x+offset,y+offset,rectangleSize-offset*2,rectangleSize-offset*2);

ctx.fillStyle=appWindow.theme.background

ctx.fillRect(x+offset+1,y+offset+1,rectangleSize-(offset+1)*2,rectangleSize-(offset+1)*2);

}

}

Can anything be done to improve its speed, or should we use c++ instead?

It paints the following:



Map size: 2323 elements.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20191031/b90fd805/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: laaeocmjenhcnjkg.png
Type: image/png
Size: 2589 bytes
Desc: not available
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20191031/b90fd805/attachment.png>


More information about the Interest mailing list