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:[email protected]]
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:[email protected]]<https://www.facebook.com/LesSolutionsAmotus/>
[cid:[email protected]]
<https://www.linkedin.com/company/amotus-solutions/>
[cid:[email protected]] <https://twitter.com/AmotusSolutions>
[cid:[email protected]]
<https://www.youtube.com/channel/UCoYpQgsmj1iJZyDjTQ3x8Ig>
From: Interest <[email protected]> On Behalf Of Alexander Dyagilev
Sent: October 31, 2019 2:13 PM
To: Nuno Santos <[email protected]>
Cc: [email protected]
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
<[email protected]<mailto:[email protected]>> 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
[email protected]<mailto:[email protected]>
https://lists.qt-project.org/listinfo/interest
_______________________________________________
Interest mailing list
[email protected]
https://lists.qt-project.org/listinfo/interest