diff options
author | Richard Moe Gustavsen <richard.gustavsen@qt.io> | 2018-07-28 22:33:25 +0200 |
---|---|---|
committer | Richard Moe Gustavsen <richard.gustavsen@qt.io> | 2018-08-07 21:17:27 +0000 |
commit | 9e54a0e095e7368279c8e8d1c8d474d1bb9a2505 (patch) | |
tree | 601291a51bf977d4ebc02677d078362a0553ca95 | |
parent | 13ea1d89f2bc35b878dde10a89dc186d8d0cd8e7 (diff) |
QQuickTableView: don't access the model from the destructor
Calling clear() from the destructor is problematic, since
clear() will try to access the application model, which
has typically already been destructed at that point. Instead
we should just clean-up any local resources.
Since we don't really have a need for the clear() function
anymore, we move the code where it belongs: into the
beginRebuildTable() function.
Task-number: QTBUG-69554
Change-Id: Ic43704c71407e805427de27cf10dbdeeae475ba8
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
-rw-r--r-- | src/quick/items/qquicktableview.cpp | 34 | ||||
-rw-r--r-- | src/quick/items/qquicktableview_p_p.h | 1 |
2 files changed, 15 insertions, 20 deletions
diff --git a/src/quick/items/qquicktableview.cpp b/src/quick/items/qquicktableview.cpp index 0db886506e..e93544c37a 100644 --- a/src/quick/items/qquicktableview.cpp +++ b/src/quick/items/qquicktableview.cpp @@ -105,7 +105,7 @@ QQuickTableViewPrivate::QQuickTableViewPrivate() QQuickTableViewPrivate::~QQuickTableViewPrivate() { - clear(); + releaseLoadedItems(); if (tableModel) delete tableModel; } @@ -397,23 +397,6 @@ void QQuickTableViewPrivate::releaseItem(FxTableItem *fxTableItem, QQmlTableInst delete fxTableItem; } -void QQuickTableViewPrivate::clear() -{ - tableInvalid = true; - tableRebuilding = false; - if (loadRequest.isActive()) - cancelLoadRequest(); - - releaseLoadedItems(); - loadedTable = QRect(); - loadedTableOuterRect = QRect(); - loadedTableInnerRect = QRect(); - contentSizeBenchMarkPoint = QPoint(-1, -1); - - updateContentWidth(); - updateContentHeight(); -} - void QQuickTableViewPrivate::unloadItem(const QPoint &cell) { const int modelIndex = modelIndexAtCell(cell); @@ -865,10 +848,23 @@ void QQuickTableViewPrivate::processLoadRequest() void QQuickTableViewPrivate::beginRebuildTable() { + Q_Q(QQuickTableView); qCDebug(lcTableViewDelegateLifecycle()); - clear(); + tableInvalid = false; tableRebuilding = true; + + releaseLoadedItems(); + loadedTable = QRect(); + loadedTableOuterRect = QRect(); + loadedTableInnerRect = QRect(); + contentSizeBenchMarkPoint = QPoint(-1, -1); + + q->setContentWidth(0); + q->setContentHeight(0); + q->setContentX(0); + q->setContentY(0); + calculateTableSize(); loadInitialTopLeftItem(); loadAndUnloadVisibleEdges(); diff --git a/src/quick/items/qquicktableview_p_p.h b/src/quick/items/qquicktableview_p_p.h index 4f5a1acdd3..19f560d3ed 100644 --- a/src/quick/items/qquicktableview_p_p.h +++ b/src/quick/items/qquicktableview_p_p.h @@ -268,7 +268,6 @@ public: void releaseItem(FxTableItem *fxTableItem, QQmlTableInstanceModel::ReusableFlag reusableFlag); void releaseLoadedItems(); - void clear(); void unloadItem(const QPoint &cell); void unloadItems(const QLine &items); |