QTreeView: make autoExpand feature usable, it should never auto-collapse

The code would toggle between expanded and collapsed every time the
mouse moves over the item (after the autoExpandDelay), which was unusable.
As reporters point out (and I fully agree), collapsing the item under
the mouse is never wanted.

I attempted an auto-collapse when moving out of the current subtree,
but that was not usable either: when moving the mouse down, the auto-collapsing
of a previous sibling means that the item we're targeting has suddenly jumped
up, it's a frustrating experience trying to aim for a moving target.

The only behavior that is usable is the most simple one: auto expand,
never auto collapse.

Fixes: QTBUG-2553
Change-Id: I2c56dd668b2df4ec23bbbe829da6e8cdd049f376
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
Reviewed-by: Christian Ehrlicher <ch.ehrlicher@gmx.de>
(cherry picked from commit 195a35dbfb2453ae37d9541c82745c5795fe8b9c)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
David Faure 2024-10-17 00:03:02 +02:00 committed by Qt Cherry-pick Bot
parent 456702e7e0
commit eb9fd6dbd4

View File

@ -309,7 +309,7 @@ void QTreeView::setHeader(QHeaderView *header)
\since 4.3 \since 4.3
This property holds the amount of time in milliseconds that the user must wait over This property holds the amount of time in milliseconds that the user must wait over
a node before that node will automatically open or close. If the time is a node before that node will automatically open. If the time is
set to less then 0 then it will not be activated. set to less then 0 then it will not be activated.
By default, this property has a value of -1, meaning that auto-expansion is disabled. By default, this property has a value of -1, meaning that auto-expansion is disabled.
@ -1278,7 +1278,7 @@ void QTreeView::timerEvent(QTimerEvent *event)
if (state() == QAbstractItemView::DraggingState if (state() == QAbstractItemView::DraggingState
&& d->viewport->rect().contains(pos)) { && d->viewport->rect().contains(pos)) {
QModelIndex index = indexAt(pos); QModelIndex index = indexAt(pos);
setExpanded(index, !isExpanded(index)); expand(index);
} }
d->openTimer.stop(); d->openTimer.stop();
} }