diff options
author | Kari Hormi <kari.hormi@qt.io> | 2019-11-06 15:53:40 +0200 |
---|---|---|
committer | Kari Hormi <kari.hormi@qt.io> | 2019-11-20 12:45:34 +0200 |
commit | acb6ed0815f92588c3ff875a568e9561fe61218c (patch) | |
tree | 9e41e2ca844d2b8e2c20333410089c608b49c7fb /src/quick/items/qquicktableview.cpp | |
parent | af090d8073a4352f6a92bbe2d015ae87476684c7 (diff) |
TableView: use fetchMore() when scrolling to the end of the table
QQmlTableInstanceModel implements canFetchMore and fetchMore functions,
but these are not called at any point in QQuickTableView. This change
checks if additional data can be fetched when atYEndChanged signal is
emitted.
Fixes: QTBUG-78273
Change-Id: I49b41b09d9a218826b34f32cd9fe4724a6097b52
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
Diffstat (limited to 'src/quick/items/qquicktableview.cpp')
-rw-r--r-- | src/quick/items/qquicktableview.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/quick/items/qquicktableview.cpp b/src/quick/items/qquicktableview.cpp index 01eb852ecd..89839c8aab 100644 --- a/src/quick/items/qquicktableview.cpp +++ b/src/quick/items/qquicktableview.cpp @@ -2314,6 +2314,7 @@ void QQuickTableViewPrivate::syncSyncView() void QQuickTableViewPrivate::connectToModel() { + Q_Q(QQuickTableView); Q_TABLEVIEW_ASSERT(model, ""); QObjectPrivate::connect(model, &QQmlInstanceModel::createdItem, this, &QQuickTableViewPrivate::itemCreatedCallback); @@ -2323,6 +2324,8 @@ void QQuickTableViewPrivate::connectToModel() const auto tm = tableModel.data(); QObjectPrivate::connect(tm, &QQmlTableInstanceModel::itemPooled, this, &QQuickTableViewPrivate::itemPooledCallback); QObjectPrivate::connect(tm, &QQmlTableInstanceModel::itemReused, this, &QQuickTableViewPrivate::itemReusedCallback); + // Connect atYEndChanged to a function that fetches data if more is available + QObjectPrivate::connect(q, &QQuickTableView::atYEndChanged, this, &QQuickTableViewPrivate::fetchMoreData); } if (auto const aim = model->abstractItemModel()) { @@ -2346,6 +2349,7 @@ void QQuickTableViewPrivate::connectToModel() void QQuickTableViewPrivate::disconnectFromModel() { + Q_Q(QQuickTableView); Q_TABLEVIEW_ASSERT(model, ""); QObjectPrivate::disconnect(model, &QQmlInstanceModel::createdItem, this, &QQuickTableViewPrivate::itemCreatedCallback); @@ -2355,6 +2359,7 @@ void QQuickTableViewPrivate::disconnectFromModel() const auto tm = tableModel.data(); QObjectPrivate::disconnect(tm, &QQmlTableInstanceModel::itemPooled, this, &QQuickTableViewPrivate::itemPooledCallback); QObjectPrivate::disconnect(tm, &QQmlTableInstanceModel::itemReused, this, &QQuickTableViewPrivate::itemReusedCallback); + QObjectPrivate::disconnect(q, &QQuickTableView::atYEndChanged, this, &QQuickTableViewPrivate::fetchMoreData); } if (auto const aim = model->abstractItemModel()) { @@ -2436,6 +2441,14 @@ void QQuickTableViewPrivate::layoutChangedCallback(const QList<QPersistentModelI scheduleRebuildTable(RebuildOption::ViewportOnly); } +void QQuickTableViewPrivate::fetchMoreData() +{ + if (tableModel && tableModel->canFetchMore()) { + tableModel->fetchMore(); + scheduleRebuildTable(RebuildOption::ViewportOnly); + } +} + void QQuickTableViewPrivate::modelResetCallback() { scheduleRebuildTable(RebuildOption::All); |