emit QAbstractSlider::valueChanged() only on value change
The signal has been emitted also, when the slider position has changed without a value change (e.g. on QWidget::show() or on resizing). This patch stops emitting the signal without a value change. It adds a verification to tst_QAbstractSlider::setValue(), that valueChanged is not emitted on a no-op value change. As a drive-by, the patch removes an unnecessary assignment and changes signal spy constructions to PTMF syntax. Pick-to: 6.5 6.4 6.2 Task-number: QTBUG-25365 Change-Id: I9932e45d4e680aa53422ca75aa42a16306213a38 Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>bb10
parent
f4d897f04e
commit
8b84374892
|
|
@ -498,18 +498,25 @@ void QAbstractSlider::setValue(int value)
|
|||
value = d->bound(value);
|
||||
if (d->value == value && d->position == value)
|
||||
return;
|
||||
|
||||
// delay signal emission until sliderChanged() has been called
|
||||
const bool emitValueChanged = (value != d->value);
|
||||
d->value = value;
|
||||
|
||||
if (d->position != value) {
|
||||
d->position = value;
|
||||
if (d->pressed)
|
||||
emit sliderMoved((d->position = value));
|
||||
emit sliderMoved(d->position);
|
||||
}
|
||||
#if QT_CONFIG(accessibility)
|
||||
QAccessibleValueChangeEvent event(this, d->value);
|
||||
QAccessible::updateAccessibility(&event);
|
||||
#endif
|
||||
sliderChange(SliderValueChange);
|
||||
emit valueChanged(value);
|
||||
|
||||
if (emitValueChanged)
|
||||
emit valueChanged(value);
|
||||
|
||||
}
|
||||
|
||||
/*!
|
||||
|
|
|
|||
|
|
@ -2021,9 +2021,9 @@ void tst_QAbstractSlider::setValue()
|
|||
slider->setRange(minimum, maximum);
|
||||
slider->setSliderDown(down);
|
||||
slider->setValue(49); // to force a valueChanged() below
|
||||
QSignalSpy spy1(slider, SIGNAL(sliderMoved(int)));
|
||||
QSignalSpy spy2(slider, SIGNAL(valueChanged(int)));
|
||||
QSignalSpy spy3(slider, SIGNAL(actionTriggered(int)));
|
||||
QSignalSpy spy1(slider, &QAbstractSlider::sliderMoved);
|
||||
QSignalSpy spy2(slider, &QAbstractSlider::valueChanged);
|
||||
QSignalSpy spy3(slider, &QAbstractSlider::actionTriggered);
|
||||
slider->setValue(50);
|
||||
QCOMPARE(spy1.size(), down ? 1 : 0);
|
||||
QCOMPARE(spy2.size(), 1);
|
||||
|
|
@ -2032,6 +2032,10 @@ void tst_QAbstractSlider::setValue()
|
|||
QCOMPARE(slider->sliderPosition(), reportedSliderPosition);
|
||||
if (down)
|
||||
QVERIFY(sliderMovedTimeStamp < valueChangedTimeStamp);
|
||||
|
||||
slider->setValue(50);
|
||||
QApplication::processEvents();
|
||||
QCOMPARE(spy2.size(), 1);
|
||||
}
|
||||
|
||||
void tst_QAbstractSlider::waitUntilTimeElapsed(const QElapsedTimer &t, int ms)
|
||||
|
|
|
|||
Loading…
Reference in New Issue