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

Fixes: QTBUG-118716
Task-number: QTBUG-104688
Change-Id: Iafeabeb9214f6c7510ea4ed87fabb7dc0ba175a6
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
(cherry picked from commit 90822833f373d9aa9e2ee9b60f93b869e718cfe0)
Reviewed-by: Christian Ehrlicher <ch.ehrlicher@gmx.de>
This commit is contained in:
Christian Ehrlicher 2023-11-05 18:34:55 +01:00
parent d15a32251c
commit 3b3b6f1adf
2 changed files with 21 additions and 1 deletions

View File

@ -28,7 +28,7 @@ public:
uint tristate : 1;
uint noChange : 1;
uint hovering : 1;
Qt::CheckState publishedState : 2;
Qt::CheckState publishedState : 3;
void init();
};

View File

@ -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::stateChanged);
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;