diff --git a/src/widgets/widgets/qcheckbox.cpp b/src/widgets/widgets/qcheckbox.cpp index 5b44271d48a..cebb0b0b413 100644 --- a/src/widgets/widgets/qcheckbox.cpp +++ b/src/widgets/widgets/qcheckbox.cpp @@ -59,7 +59,7 @@ public: \endtable Whenever a checkbox is checked or cleared, it emits the signal - stateChanged(). Connect to this signal if you want to trigger an action + checkStateChanged(). Connect to this signal if you want to trigger an action each time the checkbox changes state. You can use isChecked() to query whether or not a checkbox is checked. @@ -84,14 +84,22 @@ public: setPixmap(), accel(), setAccel(), isToggleButton(), setDown(), isDown(), isOn(), checkState(), autoRepeat(), isExclusiveToggle(), group(), setAutoRepeat(), toggle(), pressed(), released(), clicked(), toggled(), - checkState(), and stateChanged(). + checkState(), and checkStateChanged(). \sa QAbstractButton, QRadioButton */ /*! \fn void QCheckBox::stateChanged(int state) - //! Qt 7: \fn void QCheckBox::stateChanged(Qt::CheckState state) + + \obsolete + + Use checkStateChanged(Qt::CheckState) instead. +*/ + +/*! + \fn void QCheckBox::checkStateChanged(Qt::CheckState state) + \since 6.7 This signal is emitted whenever the checkbox's state changes, i.e., whenever the user checks or unchecks it. @@ -227,6 +235,7 @@ void QCheckBox::setCheckState(Qt::CheckState state) d->refresh(); if (state != d->publishedState) { d->publishedState = state; + emit checkStateChanged(state); emit stateChanged(state); } @@ -322,6 +331,7 @@ void QCheckBox::checkStateSet() Qt::CheckState state = checkState(); if (state != d->publishedState) { d->publishedState = state; + emit checkStateChanged(state); emit stateChanged(state); } } diff --git a/src/widgets/widgets/qcheckbox.h b/src/widgets/widgets/qcheckbox.h index e385dadbb8e..54c2c3c796d 100644 --- a/src/widgets/widgets/qcheckbox.h +++ b/src/widgets/widgets/qcheckbox.h @@ -36,11 +36,8 @@ public: void setCheckState(Qt::CheckState state); Q_SIGNALS: -#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0) void stateChanged(int); -#else - void stateChanged(Qt::CheckState); -#endif + void checkStateChanged(Qt::CheckState); protected: bool event(QEvent *e) override; diff --git a/tests/auto/widgets/widgets/qcheckbox/tst_qcheckbox.cpp b/tests/auto/widgets/widgets/qcheckbox/tst_qcheckbox.cpp index 9055b139019..a8f8c03e02d 100644 --- a/tests/auto/widgets/widgets/qcheckbox/tst_qcheckbox.cpp +++ b/tests/auto/widgets/widgets/qcheckbox/tst_qcheckbox.cpp @@ -25,7 +25,7 @@ private slots: void toggle(); void pressed(); void toggled(); - void stateChanged(); + void checkStateChanged(); void foregroundRole(); void minimumSizeHint(); }; @@ -188,34 +188,38 @@ void tst_QCheckBox::toggled() QCOMPARE(click_count, 0); } -void tst_QCheckBox::stateChanged() +void tst_QCheckBox::checkStateChanged() { QCheckBox testWidget; QCOMPARE(testWidget.checkState(), Qt::Unchecked); Qt::CheckState cur_state = Qt::Unchecked; + QSignalSpy checkStateChangedSpy(&testWidget, &QCheckBox::checkStateChanged); + QT_IGNORE_DEPRECATIONS( QSignalSpy stateChangedSpy(&testWidget, &QCheckBox::stateChanged); - connect(&testWidget, &QCheckBox::stateChanged, this, [&](auto state) { cur_state = Qt::CheckState(state); }); + ) + connect(&testWidget, &QCheckBox::checkStateChanged, this, [&](auto state) { cur_state = state; }); testWidget.setChecked(true); - QVERIFY(QTest::qWaitFor([&]() { return stateChangedSpy.size() == 1; })); + QTRY_COMPARE(checkStateChangedSpy.size(), 1); QCOMPARE(stateChangedSpy.size(), 1); QCOMPARE(cur_state, Qt::Checked); QCOMPARE(testWidget.checkState(), Qt::Checked); testWidget.setChecked(false); - QVERIFY(QTest::qWaitFor([&]() { return stateChangedSpy.size() == 2; })); + QTRY_COMPARE(checkStateChangedSpy.size(), 2); QCOMPARE(stateChangedSpy.size(), 2); QCOMPARE(cur_state, Qt::Unchecked); QCOMPARE(testWidget.checkState(), Qt::Unchecked); testWidget.setCheckState(Qt::PartiallyChecked); - QVERIFY(QTest::qWaitFor([&]() { return stateChangedSpy.size() == 3; })); + QTRY_COMPARE(checkStateChangedSpy.size(), 3); QCOMPARE(stateChangedSpy.size(), 3); QCOMPARE(cur_state, Qt::PartiallyChecked); QCOMPARE(testWidget.checkState(), Qt::PartiallyChecked); testWidget.setCheckState(Qt::PartiallyChecked); QCoreApplication::processEvents(); + QCOMPARE(checkStateChangedSpy.size(), 3); QCOMPARE(stateChangedSpy.size(), 3); }