diff --git a/Code/Framework/AzQtComponents/AzQtComponents/Components/Widgets/SliderCombo.cpp b/Code/Framework/AzQtComponents/AzQtComponents/Components/Widgets/SliderCombo.cpp index 7b818459d6..6333d28365 100644 --- a/Code/Framework/AzQtComponents/AzQtComponents/Components/Widgets/SliderCombo.cpp +++ b/Code/Framework/AzQtComponents/AzQtComponents/Components/Widgets/SliderCombo.cpp @@ -243,7 +243,7 @@ SliderDoubleCombo::SliderDoubleCombo(QWidget* parent) InitialiseSliderCombo(this, layout, m_spinbox, m_slider); - connect(m_slider, &SliderDouble::valueChanged, this, &SliderDoubleCombo::setValue); + connect(m_slider, &SliderDouble::valueChanged, this, &SliderDoubleCombo::setValueSlider); connect(m_spinbox, QOverload::of(&DoubleSpinBox::valueChanged), this, &SliderDoubleCombo::setValue); connect(m_slider, &SliderDouble::sliderReleased, this, &SliderDoubleCombo::editingFinished); connect(m_spinbox, &DoubleSpinBox::editingFinished, this, &SliderDoubleCombo::editingFinished); @@ -254,7 +254,7 @@ SliderDoubleCombo::~SliderDoubleCombo() { } -void SliderDoubleCombo::setValue(double value) +void SliderDoubleCombo::setValueSlider(double value) { const bool doEmit = m_value != value; m_value = value; @@ -264,10 +264,34 @@ void SliderDoubleCombo::setValue(double value) if (doEmit) { + // We don't want to update the slider from setValue as this + // causes rounding errors in the tooltip hint. + m_fromSlider = true; Q_EMIT valueChanged(); } } +void SliderDoubleCombo::setValue(double value) +{ + const bool doEmit = m_value != value; + m_value = value; + + updateSpinBox(); + if (!m_fromSlider) + { + updateSlider(); + + if (doEmit) + { + Q_EMIT valueChanged(); + } + } + else + { + m_fromSlider = false; + } +} + SliderDouble* SliderDoubleCombo::slider() const { return m_slider; diff --git a/Code/Framework/AzQtComponents/AzQtComponents/Components/Widgets/SliderCombo.h b/Code/Framework/AzQtComponents/AzQtComponents/Components/Widgets/SliderCombo.h index 2646162af4..05d0f7b51b 100644 --- a/Code/Framework/AzQtComponents/AzQtComponents/Components/Widgets/SliderCombo.h +++ b/Code/Framework/AzQtComponents/AzQtComponents/Components/Widgets/SliderCombo.h @@ -151,6 +151,8 @@ namespace AzQtComponents //! Sets the current value. void setValue(double value); + //! Sets the current value. + void setValueSlider(double value); //! Return the current value. Q_REQUIRED_RESULT double value() const; @@ -235,5 +237,6 @@ namespace AzQtComponents double m_softMinimum = 0.0; double m_softMaximum = 100.0; double m_value = 0.0; + bool m_fromSlider{ false }; }; } // namespace AzQtComponents