[Interest] Qml Canvas is too slow

Jérôme Godbout godboutj at amotus.ca
Thu Oct 31 19:21:35 CET 2019


Maybe not as fast or future proof, but Maybe a simple Item Rectangle of each type (full and empty) and use a repeater of Qml ShaderEffect {} to duplicate the rendering, may lead to decent performance. Not sure if this will be good enough.


[36E56279]
une compagnie  [cid:image002.jpg at 01D58FF6.802FCA00]
RAPPROCHEZ LA DISTANCE
Jérôme Godbout
Développeur Logiciel Sénior /
Senior Software Developer
p: +1 (418) 800-1073 ext.:109
amotus.ca<http://www.amotus-solutions.com/>
statum-iot.com<http://statum-iot.com/>
[cid:image003.png at 01D58FF6.802FCA00]<https://www.facebook.com/LesSolutionsAmotus/> [cid:image004.png at 01D58FF6.802FCA00] <https://www.linkedin.com/company/amotus-solutions/>  [cid:image005.png at 01D58FF6.802FCA00] <https://twitter.com/AmotusSolutions>  [cid:image006.jpg at 01D58FF6.802FCA00] <https://www.youtube.com/channel/UCoYpQgsmj1iJZyDjTQ3x8Ig>


From: Interest <interest-bounces at qt-project.org> On Behalf Of Alexander Dyagilev
Sent: October 31, 2019 2:13 PM
To: Nuno Santos <nunosantos at imaginando.pt>
Cc: interest at qt-project.org
Subject: Re: [Interest] Qml Canvas is too slow


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<mailto: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<mailto: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/ce791cf0/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image001.jpg
Type: image/jpeg
Size: 6751 bytes
Desc: image001.jpg
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20191031/ce791cf0/attachment.jpg>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image002.jpg
Type: image/jpeg
Size: 1016 bytes
Desc: image002.jpg
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20191031/ce791cf0/attachment-0001.jpg>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image003.png
Type: image/png
Size: 483 bytes
Desc: image003.png
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20191031/ce791cf0/attachment.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image004.png
Type: image/png
Size: 506 bytes
Desc: image004.png
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20191031/ce791cf0/attachment-0001.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image005.png
Type: image/png
Size: 500 bytes
Desc: image005.png
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20191031/ce791cf0/attachment-0002.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image006.jpg
Type: image/jpeg
Size: 713 bytes
Desc: image006.jpg
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20191031/ce791cf0/attachment-0002.jpg>


More information about the Interest mailing list