diff options
author | Richard Moe Gustavsen <richard.gustavsen@qt.io> | 2018-07-19 13:06:19 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@qt.io> | 2018-08-02 09:50:39 +0000 |
commit | 6e65da97fe84e99b786698f89fdc8408333f3682 (patch) | |
tree | ed45a0b5ab2456c2150d1d752bebfa66fb6d0f3f /src/qml/types/qqmldelegatemodel_p_p.h | |
parent | 382812cd2917180a160917d24b11825a7eeb2cf1 (diff) |
QQmlTableInstanceModel: implement support for reusing delegate items
This patch will make it possible for TableView to reuse delegate items.
The API lets TableView (or any kind of view in theory) specify if an
item is reusable at the time the item is released.
Reusing delegate items is specified per item, meaning that the view
can choose to release some items as reusable, but others not. If the
view never releases any items as reusable, no items will be
added to the pool, and hence, no items will be reused.
If the view releases an item as reusable, the model will move it
to the reuse pool rather than destroying it (if the items ref-count
is zero, and not persisted). The next time the view asks the model for
a new item, the model will first check if the pool already contains an
item, and if so, use it. Otherwise it will create a new item, like before.
Items in the pool are supposed to rest there for a short while. Ideally
only from the time items are flicked out on one side of the view, until
we reuse them when new items are flicked in on the oppsite side. One big
reason for this is that we have no way of hibernating items in QML, so
they will effectively stay alive while inside the pool. This is not
ideal, but still a huge performance improvement over what we had before,
where all items are always created from scratch. If hibernating objects
will ever be possible, it should be easy to extends the current logic to
take advantage of this.
Already existing tests for QQuickTableView should verify that no
regressions are introduced with this patch. Since recycling of items
is driven from the view, auto tests for this functionality is included
with the patch for implementing reuse support in TableView (coming
in a subsequent patch).
Change-Id: I28aa687251ce3e7e1de0b1c799fdbf44d8867d45
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src/qml/types/qqmldelegatemodel_p_p.h')
-rw-r--r-- | src/qml/types/qqmldelegatemodel_p_p.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/src/qml/types/qqmldelegatemodel_p_p.h b/src/qml/types/qqmldelegatemodel_p_p.h index e87f8d4440..43d288b5c5 100644 --- a/src/qml/types/qqmldelegatemodel_p_p.h +++ b/src/qml/types/qqmldelegatemodel_p_p.h @@ -143,6 +143,8 @@ public: QPointer<QObject> object; QPointer<QQmlDelegateModelAttached> attached; QQDMIncubationTask *incubationTask; + QQmlComponent *delegate; + int poolTime; int objectRef; int scriptRef; int groups; |