diff options
author | David Faure <david.faure@kdab.com> | 2021-03-02 00:05:00 +0100 |
---|---|---|
committer | David Faure <david.faure@kdab.com> | 2022-05-09 22:30:35 +0200 |
commit | 741afd67529ccc51b2686f59f897b6136e041719 (patch) | |
tree | db810727c037a9f150763fe07a244cbe76b2f57f /src/widgets/itemviews/qabstractitemdelegate.cpp | |
parent | 1ae30395f3693d37e8b5c145f95f47ebf4fabc0f (diff) |
QAbstractItemDelegate: fix rect given to tooltip handing
* The rect passed to QToolTip::showText() is in view coordinates,
not in global coordinates.
* Determining this rect in the first place doesn't need calling view->visualRect(index)
The view already did this before calling this method, and stored it in
option.rect, so just use that.
* The widget passed to QToolTip::showText() should be the viewport,
that's what option.rect is relative to (thanks Giuseppe!).
Found these issues when implementing my own tooltip handing (for a subrect
of a delegate) by looking at this code.
Pick-to: 6.3 6.2 5.15
Change-Id: I852e5409def28da98137cd0c4c996083e5e45706
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
Diffstat (limited to 'src/widgets/itemviews/qabstractitemdelegate.cpp')
-rw-r--r-- | src/widgets/itemviews/qabstractitemdelegate.cpp | 7 |
1 files changed, 1 insertions, 6 deletions
diff --git a/src/widgets/itemviews/qabstractitemdelegate.cpp b/src/widgets/itemviews/qabstractitemdelegate.cpp index 086a24ef0f..17a923872f 100644 --- a/src/widgets/itemviews/qabstractitemdelegate.cpp +++ b/src/widgets/itemviews/qabstractitemdelegate.cpp @@ -380,12 +380,7 @@ bool QAbstractItemDelegate::helpEvent(QHelpEvent *event, const QString tooltip = index.isValid() ? d->textForRole(Qt::ToolTipRole, index.data(Qt::ToolTipRole), option.locale, precision) : QString(); - QRect rect; - if (index.isValid()) { - const QRect r = view->visualRect(index); - rect = QRect(view->mapToGlobal(r.topLeft()), r.size()); - } - QToolTip::showText(he->globalPos(), tooltip, view, rect); + QToolTip::showText(he->globalPos(), tooltip, view->viewport(), option.rect); event->setAccepted(!tooltip.isEmpty()); break; } |