[Interest] Qml Canvas is too slow

Nuno Santos nunosantos at imaginando.pt
Thu Oct 31 22:02:52 CET 2019


Alexander,

Why do you want to stick to pure Qml?

What are the reasons?

--
Nuno Santos

No dia 31/10/2019, às 18:13, Alexander Dyagilev <alervdvcw at gmail.com> escreveu:

> Thanks for the answer.
> 
> This means I'll have to use c++. But I was asking for a way to stick with a pure QML.
> 
> 
> 
>> On 10/31/2019 7:52 PM, Nuno Santos wrote:
>> Alexander,
>> 
>> You should use QtQuick Scene Graph. It will be 100x faster.
>> 
>> Look for examples on QtCreator under the welcome tab. Use the search input box and write “scene graph”.
>> 
>> Scene Graph - Custom Geometry
>> Scene Graph - Graph
>> 
>> If it is the first time, it might look confusing but it will pay off.
>> 
>> Best,
>> 
>> Nuno
>> 
>>> On 31 Oct 2019, at 16:42, Alexander Dyagilev <alervdvcw at gmail.com> wrote:
>>> 
>>> 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
>>>         property int offset: 1
>>>         onPaint: drawMap()
>>>         function drawMap() {
>>>             if (columnsCount === 0 || rowsCount === 0) {
>>>                 return;
>>>             }
>>>             var map = downloadProgressMap.map();
>>>             var ctx = getContext("2d");
>>>             for (var i = 0; i < map.length; i++) {
>>>                 var x = (i % columnsCount) * rectangleSize;
>>>                 var y = (Math.floor(i/columnsCount)) * rectangleSize;
>>>                 if (map[i]) {
>>>                     drawFillRect(ctx, x, y);
>>>                 } else {
>>>                     drawClearRect(ctx, x, y);
>>>                 }
>>>             }
>>>         }
>>>         function drawFillRect(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);
>>>         }
>>>         function drawClearRect(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:
>>> 
>>> <laaeocmjenhcnjkg.png>
>>> 
>>> Map size: 2323 elements.
>>> _______________________________________________
>>> Interest mailing list
>>> Interest at qt-project.org
>>> https://lists.qt-project.org/listinfo/interest
>> 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20191031/ac83ed9b/attachment-0001.html>


More information about the Interest mailing list