From c67c468ec13a134c5ad7fe36bf69f12a3498a01b Mon Sep 17 00:00:00 2001 From: Richard Moe Gustavsen Date: Thu, 20 Jan 2022 15:51:00 +0100 Subject: QQuickTreeView: be able to expand rows that are not yet visible in the view If the app expands a row in TreeView, that row will for a brief moment be expanded in the proxy model, but not in the view, until the view is polished. For that reason, when determining if a row can be expanded or not, we should check the state of the proxy model, and not the view. Note: if the application needs the state of the view to reflect the state of the proxy model immediataly after a call to expand, forcePolish() is always possible. Task-number: QTBUG-91374 Change-Id: Ibda8d90e2dc2077a6f24090566ce3ba20a734c29 Reviewed-by: Shawn Rutledge --- src/qquicktreeview.cpp | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) (limited to 'src/qquicktreeview.cpp') diff --git a/src/qquicktreeview.cpp b/src/qquicktreeview.cpp index c2bd912..01010e0 100644 --- a/src/qquicktreeview.cpp +++ b/src/qquicktreeview.cpp @@ -647,40 +647,44 @@ QQuickTreeView::~QQuickTreeView() bool QQuickTreeView::isExpanded(int row) const { - if (row < 0 || row >= rows()) + Q_D(const QQuickTreeView); + if (row < 0 || row >= d->m_proxyModel.rowCount()) return false; - return d_func()->m_proxyModel.isExpanded(row); + return d->m_proxyModel.isExpanded(row); } bool QQuickTreeView::hasChildren(int row) const { - if (row < 0 || row >= rows()) + Q_D(const QQuickTreeView); + if (row < 0 || row >= d->m_proxyModel.rowCount()) return false; - return d_func()->m_proxyModel.hasChildren(row); + return d->m_proxyModel.hasChildren(row); } bool QQuickTreeView::hasSiblings(int row) const { - if (row < 0 || row >= rows()) + Q_D(const QQuickTreeView); + if (row < 0 || row >= d->m_proxyModel.rowCount()) return false; - return d_func()->m_proxyModel.hasSiblings(row); + return d->m_proxyModel.hasSiblings(row); } int QQuickTreeView::depth(int row) const { - if (row < 0 || row >= rows()) + Q_D(const QQuickTreeView); + if (row < 0 || row >= d->m_proxyModel.rowCount()) return -1; - return d_func()->m_proxyModel.depthAtRow(row); + return d->m_proxyModel.depthAtRow(row); } void QQuickTreeView::expand(int row) { Q_D(QQuickTreeView); - if (row < 0 || row >= rows()) + if (row < 0 || row >= d->m_proxyModel.rowCount()) return; if (d->m_proxyModel.isExpanded(row)) @@ -714,7 +718,7 @@ void QQuickTreeView::toggleModelIndexExpanded(const QModelIndex &modelIndex) void QQuickTreeView::collapse(int row) { Q_D(QQuickTreeView); - if (row < 0 || row >= rows()) + if (row < 0 || row >= d->m_proxyModel.rowCount()) return; if (!d->m_proxyModel.isExpanded(row)) -- cgit v1.2.3