[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