Details
-
Bug
-
Resolution: Done
-
P1: Critical
-
5.9.1, 5.10.0 RC
-
8a0f0553e4eb8468513bbb8ba45a9ec2bcd6ce68
Description
Hello,
When there are a few rows/columns (but not that many, I tested it with 300 items and 12 columns) in a QML TableView, the associated performance of a scroll are generally bad, with frame drops and little freezes.
When looking at the source of the internal delegate of TableView, TableViewItemDelegateLoader.qml, we can see the following code:
Loader { id: itemDelegateLoader // ... sourceComponent: __model === undefined || styleData.row === -1 ? null : __column && __column.delegate ? __column.delegate : __itemDelegate }
We can see here that the sourceComponent property depends on styleData.row. Since delegates are reused in QML TableView, this property (styleData.row) changes a lot during scrolls, leading to creation and destruction of delegates, and lags.
Technically, the sourceComponent property effectively creates/destroys a component only on change of the QQuickComponent, so it should not do anything, BUT It appears that styleData.row is frequently set to -1 during scroll (when reusing components, it changes), leading to component creations/destruction.
By changing the code to:
Loader { id: itemDelegateLoader // ... sourceComponent: __model === undefined ? null : __column && __column.delegate ? __column.delegate : __itemDelegate }
I don't see any visual change/error and I don't see the lags anymore (at least not with this amount of data). It's probably not the right way to fix it, but can something be done about this?
Thanks,
Louis
Attachments
For Gerrit Dashboard: QTBUG-62809 | ||||||
---|---|---|---|---|---|---|
# | Subject | Branch | Project | Status | CR | V |
214373,2 | TableView: Don't unset the delegate loader source component | 5.9 | qt/qtquickcontrols | Status: MERGED | +2 | 0 |