[Interest] QML Listview delegate in C++

Bo Thorsen bo at vikingsoft.eu
Sat Jun 6 08:34:36 CEST 2015

Den 05-06-2015 kl. 23:04 skrev Simone:
> I'm facing a problem in my QML application. The target is an Arrm processor

Ah, the pirate processor :)

> (freescale iMX53) with not so much capabilities.
> My problem is that I have a quite complex listview delegate item, and I observe a cpu usage very high when scrolling my list with lot of items, penalyzing the smoothness of the scrolling.
> I was wondering if I can develop the delegate in C++ (with widgets) instead of pure QML since the creation of QML objects is (of course) slower.

No, you can't use widgets for this. Technically that might not be 
entirely accurate, but since we're talking performance, it is.

What you can do instead is to create a new kind of item yourself by 
subclassing QQuickItem and using native OpenGL rendering to do this. 
There are examples in the Qt dir that shows how to do this. You can also 
watch a talk from last years dev days about how to do this.

If you create a single item delegate that performs the entire painting 
without creating other objects, you probably can't do better. Now, 
wether this actually solves your problem

> Is there such possibility?
> Can I reasonably increase scroll performances?

Yes, that should be possible. I was not sure if the delegate was 
instantiated multiple times or reused, but a quick test with this shows 
that it's actually created over and over again:

import QtQuick 2.2

Rectangle {
     width: 360
     height: 360

     property int delegateCount: 0

     Component {
         id: itemDelegate
         Text {
             text: "I am item number: " + index
             Component.onCompleted: console.log("Instantiated delegate", 

     ListView {
         anchors.fill: parent
         model: 1000000
         delegate: itemDelegate

I hope this helps,


Viking Software
Qt and C++ developers for hire

More information about the Interest mailing list