From 28c6f5580003322247516bb688a5ea619f70336a Mon Sep 17 00:00:00 2001 From: baldurk Date: Wed, 5 Aug 2026 10:45:07 +0100 Subject: [PATCH] Custom render tooltip events in RDHeaderView * Because Qt is awful at customising controls, the functions used to fetch the index of sections are not virtual so the internal QHeaderView version doesn't get the right sections when we have column grouping enabled. --- qrenderdoc/Widgets/Extended/RDHeaderView.cpp | 23 ++++++++++++++++++++ qrenderdoc/Widgets/Extended/RDHeaderView.h | 1 + 2 files changed, 24 insertions(+) diff --git a/qrenderdoc/Widgets/Extended/RDHeaderView.cpp b/qrenderdoc/Widgets/Extended/RDHeaderView.cpp index 1809edaa0..517bdb51d 100644 --- a/qrenderdoc/Widgets/Extended/RDHeaderView.cpp +++ b/qrenderdoc/Widgets/Extended/RDHeaderView.cpp @@ -30,6 +30,7 @@ #include #include #include +#include #include #include "Code/QRDUtils.h" @@ -864,6 +865,28 @@ void RDHeaderView::paintEvent(QPaintEvent *e) } } +bool RDHeaderView::viewportEvent(QEvent *e) +{ + if(e->type() == QEvent::ToolTip) + { + QHelpEvent *h = (QHelpEvent *)e; + int section = logicalIndexAt(h->pos()); + if(section >= 0) + { + QAbstractItemModel *m = this->model(); + + QVariant tooltip = m->headerData(section, orientation(), Qt::ToolTipRole); + if(tooltip.isValid()) + { + QToolTip::showText(h->globalPos(), tooltip.toString(), this); + return true; + } + } + } + + return QHeaderView::viewportEvent(e); +} + void RDHeaderView::paintSection(QPainter *painter, const QRect &rect, int section) const { if(!m_customSizing) diff --git a/qrenderdoc/Widgets/Extended/RDHeaderView.h b/qrenderdoc/Widgets/Extended/RDHeaderView.h index 09f1324a6..af7b047f0 100644 --- a/qrenderdoc/Widgets/Extended/RDHeaderView.h +++ b/qrenderdoc/Widgets/Extended/RDHeaderView.h @@ -79,6 +79,7 @@ protected: void mouseMoveEvent(QMouseEvent *event) override; void mouseReleaseEvent(QMouseEvent *event) override; void paintEvent(QPaintEvent *e) override; + bool viewportEvent(QEvent *e) override; void paintSection(QPainter *painter, const QRect &rect, int section) const override; void currentChanged(const QModelIndex ¤t, const QModelIndex &old) override;