summaryrefslogtreecommitdiffstats
path: root/src/widgets/itemviews/qabstractitemview_p.h
diff options
context:
space:
mode:
authorAxel Spoerl <axel.spoerl@qt.io>2023-07-27 14:03:18 +0200
committerAxel Spoerl <axel.spoerl@qt.io>2023-08-01 19:25:06 +0200
commitd35e8ad754ebb08430669cef64f10d34e4277d1f (patch)
tree48c98749985b06c62e9046c775857dbc70be8902 /src/widgets/itemviews/qabstractitemview_p.h
parent5db5d3e4b1e4c3ba996f9cc6109d1d0309255aa3 (diff)
Implement private visualRect() in QTreeView and QAbstractItemView
QTreeView::visualRect() returns a given model index's visual rectangle. The method is used to toggle the background during hovering. The previous implementation included the row indicator, when the first row section was hovered. When it was unhovered, the row indicator remained highlighted, until the mouse had left the view port. The reason is, that the highlighting implementation changed the rectangle returned for the first section, to include the row indicator. The implementation for neutralising a highlighted section relies on QAbstractItemViewPrivate::setHoverIndex() and QAbstractItemView::update(). These methods don't know about the row indicator to be included, and therefore do not update() its rectangle. As a consequence, the correct background gets painted but not updated on the screen. This patch moves the calculation of the visual rectangle to a new QTreeViewPrivate::visualRect_impl(). In addition to the model index, the new method expects an enum argument, representing the calculation rule: - SingleSection: Calculate the rectangle of the given section. - FullRow: Returns the rectangle of the entire row, regardless of the index's column. - AddRowIndiCatorToFirstCulumn: Adds the row indicator to the rect, if the model index points to the first column. The patch updates all calls within QTreeView, to use the private method with the right calculation rule for the use case at hand. It elminates manual (and repeated) modifications of the return value. The patch implements QAbstractItemViewPrivate::visualRect(), which returns QAbstractItemView::visualRect(). It is overridden in QTreeViewPrivate, so that QAbstractItemViewPrivate::setHoverIndex() and QAbstractItemView receive the rectangle including row indicator. As a drive-by, several local variables have been constified and/or renamed to indicative variable names. Fixes: QTBUG-115149 Pick-to: 6.6 6.5 Change-Id: I4838bcf744f87d8cfb259c5d8758fb65e091e9fe Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Diffstat (limited to 'src/widgets/itemviews/qabstractitemview_p.h')
-rw-r--r--src/widgets/itemviews/qabstractitemview_p.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/widgets/itemviews/qabstractitemview_p.h b/src/widgets/itemviews/qabstractitemview_p.h
index bd859e1332..f016f085d8 100644
--- a/src/widgets/itemviews/qabstractitemview_p.h
+++ b/src/widgets/itemviews/qabstractitemview_p.h
@@ -417,6 +417,8 @@ public:
bool verticalScrollModeSet;
bool horizontalScrollModeSet;
+ virtual QRect visualRect(const QModelIndex &index) const { return q_func()->visualRect(index); }
+
private:
inline QAbstractItemDelegate *delegateForIndex(const QModelIndex &index) const {
QMap<int, QPointer<QAbstractItemDelegate> >::ConstIterator it;