[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