Manually propagate clicks on custom tooltip to underlying widget

* Qt::WA_TransparentForMouseEvents is supposed to do this but clearly
  doesn't work as it's supposed to.
This commit is contained in:
baldurk
2018-02-19 19:37:26 +00:00
parent 3b73ca9fe4
commit cea77ebd39
2 changed files with 35 additions and 3 deletions
+28 -2
View File
@@ -67,7 +67,7 @@ void RDTreeViewDelegate::initStyleOption(QStyleOptionViewItem *option, const QMo
}
}
RDTipLabel::RDTipLabel() : QLabel(NULL)
RDTipLabel::RDTipLabel(QWidget *listener) : QLabel(NULL), mouseListener(listener)
{
int margin = style()->pixelMetric(QStyle::PM_ToolTipLabelFrameWidth, NULL, this);
int opacity = style()->styleHint(QStyle::SH_ToolTipLabel_Opacity, NULL, this);
@@ -94,6 +94,32 @@ void RDTipLabel::paintEvent(QPaintEvent *ev)
QLabel::paintEvent(ev);
}
void RDTipLabel::mousePressEvent(QMouseEvent *e)
{
if(mouseListener)
sendListenerEvent(e);
}
void RDTipLabel::sendListenerEvent(QMouseEvent *e)
{
QMouseEvent *duplicate =
new QMouseEvent(e->type(), mouseListener->mapFromGlobal(e->globalPos()), e->windowPos(),
e->globalPos(), e->button(), e->buttons(), e->modifiers(), e->source());
QCoreApplication::postEvent(mouseListener, duplicate);
}
void RDTipLabel::mouseReleaseEvent(QMouseEvent *e)
{
if(mouseListener)
sendListenerEvent(e);
}
void RDTipLabel::mouseDoubleClickEvent(QMouseEvent *e)
{
if(mouseListener)
sendListenerEvent(e);
}
void RDTipLabel::resizeEvent(QResizeEvent *e)
{
QStyleHintReturnMask frameMask;
@@ -112,7 +138,7 @@ RDTreeView::RDTreeView(QWidget *parent) : QTreeView(parent)
m_delegate = new RDTreeViewDelegate(this);
QTreeView::setItemDelegate(m_delegate);
m_ElidedTooltip = new RDTipLabel();
m_ElidedTooltip = new RDTipLabel(viewport());
m_ElidedTooltip->hide();
}
+7 -1
View File
@@ -57,14 +57,20 @@ private:
Q_OBJECT
int m_TooltipMargin = 0;
QWidget *mouseListener;
public:
explicit RDTipLabel();
explicit RDTipLabel(QWidget *listener = NULL);
int tipMargin() { return m_TooltipMargin; }
protected:
void paintEvent(QPaintEvent *);
void mousePressEvent(QMouseEvent *);
void mouseReleaseEvent(QMouseEvent *);
void mouseDoubleClickEvent(QMouseEvent *);
void resizeEvent(QResizeEvent *);
void sendListenerEvent(QMouseEvent *e);
};
class RDTreeView : public QTreeView