diff options
-rw-r--r-- | src/widgets/widgets/qabstractbutton.cpp | 16 | ||||
-rw-r--r-- | src/widgets/widgets/qabstractbutton_p.h | 1 | ||||
-rw-r--r-- | src/widgets/widgets/qbuttongroup.cpp | 21 | ||||
-rw-r--r-- | src/widgets/widgets/qbuttongroup.h | 3 | ||||
-rw-r--r-- | tests/auto/widgets/widgets/qabstractbutton/tst_qabstractbutton.cpp | 6 | ||||
-rw-r--r-- | tests/auto/widgets/widgets/qbuttongroup/tst_qbuttongroup.cpp | 20 |
6 files changed, 65 insertions, 2 deletions
diff --git a/src/widgets/widgets/qabstractbutton.cpp b/src/widgets/widgets/qabstractbutton.cpp index 3f9b28a883..be712f0747 100644 --- a/src/widgets/widgets/qabstractbutton.cpp +++ b/src/widgets/widgets/qabstractbutton.cpp @@ -575,6 +575,20 @@ void QAbstractButtonPrivate::emitReleased() #endif } +void QAbstractButtonPrivate::emitToggled(bool checked) +{ + Q_Q(QAbstractButton); + QPointer<QAbstractButton> guard(q); + emit q->toggled(checked); +#ifndef QT_NO_BUTTONGROUP + if (guard && group) { + emit group->buttonToggled(group->id(q), checked); + if (guard && group) + emit group->buttonToggled(q, checked); + } +#endif +} + /*! Constructs an abstract button with a \a parent. */ @@ -758,7 +772,7 @@ void QAbstractButton::setChecked(bool checked) if (guard && checked) d->notifyChecked(); if (guard) - emit toggled(checked); + d->emitToggled(checked); #ifndef QT_NO_ACCESSIBILITY diff --git a/src/widgets/widgets/qabstractbutton_p.h b/src/widgets/widgets/qabstractbutton_p.h index 4585728848..a148e60717 100644 --- a/src/widgets/widgets/qabstractbutton_p.h +++ b/src/widgets/widgets/qabstractbutton_p.h @@ -103,6 +103,7 @@ public: void emitPressed(); void emitReleased(); void emitClicked(); + void emitToggled(bool checked); }; QT_END_NAMESPACE diff --git a/src/widgets/widgets/qbuttongroup.cpp b/src/widgets/widgets/qbuttongroup.cpp index f22910007f..c484b154fd 100644 --- a/src/widgets/widgets/qbuttongroup.cpp +++ b/src/widgets/widgets/qbuttongroup.cpp @@ -174,6 +174,27 @@ */ /*! + \fn void QButtonGroup::buttonToggled(QAbstractButton *button, bool checked) + \since 5.2 + + This signal is emitted when the given \a button is toggled. + \a checked is true if the button is checked, or false if the button is unchecked. + + \sa QAbstractButton::toggled() +*/ + +/*! + \fn void QButtonGroup::buttonToggled(int id, bool checked) + \since 5.2 + + This signal is emitted when a button with the given \a id is toggled. + \a checked is true if the button is checked, or false if the button is unchecked. + + \sa QAbstractButton::toggled() +*/ + + +/*! \fn void QButtonGroup::addButton(QAbstractButton *button, int id = -1); Adds the given \a button to the button group. If \a id is -1, diff --git a/src/widgets/widgets/qbuttongroup.h b/src/widgets/widgets/qbuttongroup.h index 84fe26e0df..06656bf18c 100644 --- a/src/widgets/widgets/qbuttongroup.h +++ b/src/widgets/widgets/qbuttongroup.h @@ -85,7 +85,8 @@ Q_SIGNALS: void buttonPressed(int); void buttonReleased(QAbstractButton *); void buttonReleased(int); - + void buttonToggled(QAbstractButton *, bool); + void buttonToggled(int, bool); private: Q_DISABLE_COPY(QButtonGroup) diff --git a/tests/auto/widgets/widgets/qabstractbutton/tst_qabstractbutton.cpp b/tests/auto/widgets/widgets/qabstractbutton/tst_qabstractbutton.cpp index ffb4526f11..93262722b9 100644 --- a/tests/auto/widgets/widgets/qabstractbutton/tst_qabstractbutton.cpp +++ b/tests/auto/widgets/widgets/qabstractbutton/tst_qabstractbutton.cpp @@ -490,6 +490,12 @@ void tst_QAbstractButton::toggled() QTest::mouseRelease( testWidget, Qt::LeftButton ); QVERIFY( click_count == 1 ); + + testWidget->setCheckable(true); + testWidget->toggle(); + testWidget->toggle(); + QCOMPARE(int(toggle_count), 2); + testWidget->setCheckable(false); } void tst_QAbstractButton::setShortcut() diff --git a/tests/auto/widgets/widgets/qbuttongroup/tst_qbuttongroup.cpp b/tests/auto/widgets/widgets/qbuttongroup/tst_qbuttongroup.cpp index c37060f5d5..f027eda6a2 100644 --- a/tests/auto/widgets/widgets/qbuttongroup/tst_qbuttongroup.cpp +++ b/tests/auto/widgets/widgets/qbuttongroup/tst_qbuttongroup.cpp @@ -359,6 +359,26 @@ void tst_QButtonGroup::testSignals() QCOMPARE(releasedSpy.count(), 1); QCOMPARE(releasedIdSpy.count(), 1); QVERIFY(releasedIdSpy.takeFirst().at(0).toInt() == 23); + + + QSignalSpy toggledSpy(&buttons, SIGNAL(buttonToggled(QAbstractButton*, bool))); + QSignalSpy toggledIdSpy(&buttons, SIGNAL(buttonToggled(int, bool))); + + pb1.setCheckable(true); + pb2.setCheckable(true); + pb1.toggle(); + QCOMPARE(toggledSpy.count(), 1); + QCOMPARE(toggledIdSpy.count(), 1); + + pb2.toggle(); + QCOMPARE(toggledSpy.count(), 3); // equals 3 since pb1 and pb2 are both toggled + QCOMPARE(toggledIdSpy.count(), 3); + + pb1.setCheckable(false); + pb2.setCheckable(false); + pb1.toggle(); + QCOMPARE(toggledSpy.count(), 3); + QCOMPARE(toggledIdSpy.count(), 3); } void tst_QButtonGroup::task106609() |