summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/widgets/widgets/qabstractbutton.cpp16
-rw-r--r--src/widgets/widgets/qabstractbutton_p.h1
-rw-r--r--src/widgets/widgets/qbuttongroup.cpp21
-rw-r--r--src/widgets/widgets/qbuttongroup.h3
-rw-r--r--tests/auto/widgets/widgets/qabstractbutton/tst_qabstractbutton.cpp6
-rw-r--r--tests/auto/widgets/widgets/qbuttongroup/tst_qbuttongroup.cpp20
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()