From c9830c2fb902f26dc8b2df61dfadc2d7a7d2b30e Mon Sep 17 00:00:00 2001 From: Giuseppe D'Angelo Date: Thu, 26 Aug 2021 19:56:54 +0200 Subject: [PATCH] QToolButton: reimplement the fix for QTBUG-95255 The code in 188d739400e10fc8571bbf2ec86d5cd338b04a5d uses a connect() to a lambda, passing UniqueConnection to avoid establishing the connection more than once. The problem is that UniqueConnection does not work with lambdas; it works only with "regular" PMFs to QObject subclasses. Re-do the same fix, but without a connection: use the checkStateSet() virtual from the base class that will notify us if setChecked() is being called on the tool button, and from there synchronize the state of the default action. Change-Id: Id512812c562cd6d20bc1a489753b33c269919d32 Fixes: QTBUG-95255 Pick-to: 6.2 6.1 Reviewed-by: Volker Hilsheimer --- src/widgets/widgets/qtoolbutton.cpp | 16 +++++++++------- src/widgets/widgets/qtoolbutton.h | 1 + 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/widgets/widgets/qtoolbutton.cpp b/src/widgets/widgets/qtoolbutton.cpp index ee58797d3c..96c3510529 100644 --- a/src/widgets/widgets/qtoolbutton.cpp +++ b/src/widgets/widgets/qtoolbutton.cpp @@ -961,12 +961,6 @@ void QToolButton::setDefaultAction(QAction *action) } #endif setCheckable(action->isCheckable()); - if (action->isCheckable()) { - connect(this, &QAbstractButton::toggled, this, [this](bool checked) { - if (defaultAction()) - defaultAction()->setChecked(checked); - }, Qt::UniqueConnection); - } setChecked(action->isChecked()); setEnabled(action->isEnabled()); if (action->d_func()->fontSet) @@ -985,7 +979,15 @@ QAction *QToolButton::defaultAction() const return d->defaultAction; } - +/*! + \reimp + */ +void QToolButton::checkStateSet() +{ + Q_D(QToolButton); + if (d->defaultAction && d->defaultAction->isCheckable()) + d->defaultAction->setChecked(isChecked()); +} /*! \reimp diff --git a/src/widgets/widgets/qtoolbutton.h b/src/widgets/widgets/qtoolbutton.h index 96702c145f..062eeea708 100644 --- a/src/widgets/widgets/qtoolbutton.h +++ b/src/widgets/widgets/qtoolbutton.h @@ -118,6 +118,7 @@ protected: void changeEvent(QEvent *) override; bool hitButton(const QPoint &pos) const override; + void checkStateSet() override; void nextCheckState() override; virtual void initStyleOption(QStyleOptionToolButton *option) const;