[Development] Improve performance (listview + onVerticalVelocityChanged)

Bernhard B schluchti at gmail.com
Thu Jan 26 15:38:44 CET 2017


Hi,

I am currently trying to optimize my Listview for performance. I already
removed most of the bottlenecks by following the great recommendations at:
http://doc.qt.io/qt-5/qtquick-performance.html

However, there is one problem I don't how to solve. It's about this code
part:

ListView{
    clip: true
    property real flickTabBarTreshold;

    Component.onCompleted: {
        flickTabBarTreshold = (2/3) * maximumFlickVelocity;
    }

    onVerticalVelocityChanged: {


    //when user scrolls fast enough up, show the tab bar     //and the
"back to top" button

    if(verticalVelocity < -flickTabBarTreshold) {
        backToTopButton.visible = true;

        tabBar.show();

    }



    //when user scrolls fast enough down hide "back to top" button
//and the tab bar
    if(verticalVelocity > flickTabBarTreshold){

        backToTopButton.visible = false;

        tabBar.hide();

    }

    //always disable "back to top button" when top reached
if(indexAt(contentX, contentY) === 0)        backToTopButton.visible =
false;

    }
}

This part is one of the biggest performance bottlenecks at the moment (as
it gets called a lot of times) and has a significant impact on the
scrolling behavior (lagging).

My idea was to put that code somehow in my C++ Listmodel and emit only a
signal when something actually changed.

For the last part

//always disable "back to top button" when top
reachedif(indexAt(contentX, contentY) === 0)   backToTopButton.visible
= false;


I think it should be possible to check that in the
QVariant <http://doc.qt.io/qt-5/qvariant.html> QAbstractItemModel::data(const
QModelIndex <http://doc.qt.io/qt-5/qmodelindex.html> &*index*, int *role* =
Qt::DisplayRole) const

method. When index.row() === 0, I a signal will be emitted. In QML I am
connecting on that signal and execute  backToTopButton.visible = false;

I haven't tested it yet, but I think it should work.

For the other two conditions however, I am a little bit clueless.

Does anyone of you guys maybe have an idea on how to improve that?

Any help is really appreciated.


Thanks,

Bernhard
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/development/attachments/20170126/62b5480a/attachment.html>


More information about the Development mailing list