summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Ehrlicher <[email protected]>2023-11-05 18:34:55 +0100
committerChristian Ehrlicher <[email protected]>2023-11-08 11:11:48 +0100
commit90822833f373d9aa9e2ee9b60f93b869e718cfe0 (patch)
treeed8ec4183fc6db057ed00ca0aee1461f4a8515be
parentc8c8299a636c25fc44d07c5444849fe8ac9021e1 (diff)
QCheckBox: Don't emit checkStateChanged when nothing changed
QCheckBox::checkStateChanged() was emitted with msvc even though the check state was not changed due to a faulty comparison. Amends: 37b47ebf946ef1a37573107375fbe5fc0eb1e6d2 Pick-to: 6.6 Fixes: QTBUG-118716 Task-number: QTBUG-104688 Change-Id: Iafeabeb9214f6c7510ea4ed87fabb7dc0ba175a6 Reviewed-by: Friedemann Kleint <[email protected]>
-rw-r--r--src/widgets/widgets/qcheckbox.cpp2
-rw-r--r--tests/auto/widgets/widgets/qcheckbox/tst_qcheckbox.cpp20
2 files changed, 21 insertions, 1 deletions
diff --git a/src/widgets/widgets/qcheckbox.cpp b/src/widgets/widgets/qcheckbox.cpp
index cebb0b0b413..970a15e3a86 100644
--- a/src/widgets/widgets/qcheckbox.cpp
+++ b/src/widgets/widgets/qcheckbox.cpp
@@ -28,7 +28,7 @@ public:
uint tristate : 1;
uint noChange : 1;
uint hovering : 1;
- Qt::CheckState publishedState : 2;
+ Qt::CheckState publishedState : 3;
void init();
};
diff --git a/tests/auto/widgets/widgets/qcheckbox/tst_qcheckbox.cpp b/tests/auto/widgets/widgets/qcheckbox/tst_qcheckbox.cpp
index a8f8c03e02d..23082485c25 100644
--- a/tests/auto/widgets/widgets/qcheckbox/tst_qcheckbox.cpp
+++ b/tests/auto/widgets/widgets/qcheckbox/tst_qcheckbox.cpp
@@ -16,6 +16,7 @@ private slots:
void initTestCase();
void setChecked();
+ void setCheckedSignal();
void setTriState();
void setText_data();
void setText();
@@ -59,6 +60,25 @@ void tst_QCheckBox::setChecked()
QVERIFY(!testWidget.isChecked());
}
+void tst_QCheckBox::setCheckedSignal()
+{
+ QCheckBox testWidget;
+ testWidget.setCheckState(Qt::Unchecked);
+ QSignalSpy checkStateChangedSpy(&testWidget, &QCheckBox::checkStateChanged);
+ testWidget.setCheckState(Qt::Checked);
+ testWidget.setCheckState(Qt::Checked);
+ QTRY_COMPARE(checkStateChangedSpy.size(), 1); // get signal only once
+ QCOMPARE(testWidget.checkState(), Qt::Checked);
+ testWidget.setCheckState(Qt::Unchecked);
+ testWidget.setCheckState(Qt::Unchecked);
+ QTRY_COMPARE(checkStateChangedSpy.size(), 2); // get signal only once
+ QCOMPARE(testWidget.checkState(), Qt::Unchecked);
+ testWidget.setCheckState(Qt::PartiallyChecked);
+ testWidget.setCheckState(Qt::PartiallyChecked);
+ QTRY_COMPARE(checkStateChangedSpy.size(), 3); // get signal only once
+ QCOMPARE(testWidget.checkState(), Qt::PartiallyChecked);
+}
+
void tst_QCheckBox::setTriState()
{
QCheckBox testWidget;