diff --git a/src/widgets/thermowidget.h b/src/widgets/thermowidget.h --- a/src/widgets/thermowidget.h +++ b/src/widgets/thermowidget.h @@ -56,8 +56,10 @@ QString m_currentTemperatureTextFromEditor = QString("-"); QString m_name; QTimer *m_cursorTimer = nullptr; + QTimer *m_tempChangedTimer = nullptr; bool m_paintCursor = false; int m_cursorPos = 0; double m_currentTemperature; double m_targetTemperature; + void resetTimer(); }; diff --git a/src/widgets/thermowidget.cpp b/src/widgets/thermowidget.cpp --- a/src/widgets/thermowidget.cpp +++ b/src/widgets/thermowidget.cpp @@ -31,6 +31,7 @@ QwtDial(parent) , m_targetTemperatureNeedle(new QwtDialSimpleNeedle(QwtDialSimpleNeedle::Arrow, Qt::red, Qt::darkRed)) , m_name(name) + , m_tempChangedTimer(new QTimer()) , m_currentTemperature(0) , m_targetTemperature(0) { @@ -46,6 +47,11 @@ m_paintCursor = !m_paintCursor; update(); }); + + m_tempChangedTimer->setSingleShot(true); + connect(m_tempChangedTimer, &QTimer::timeout, this, [this] { + emit targetTemperatureChanged(m_targetTemperature); + }); } void ThermoWidget::keyPressEvent(QKeyEvent *event) @@ -136,7 +142,7 @@ if (m_targetTemperature != m_currentTemperatureTextFromEditor.toInt()) { m_targetTemperature = m_currentTemperatureTextFromEditor.toInt(); - emit targetTemperatureChanged(m_targetTemperature); + resetTimer(); update(); event->accept(); } @@ -160,7 +166,7 @@ if (m_targetTemperature != m_currentTemperatureTextFromEditor.toInt()) { m_targetTemperature = m_currentTemperatureTextFromEditor.toInt(); - emit targetTemperatureChanged(m_targetTemperature); + resetTimer(); update(); } event->accept(); @@ -170,7 +176,7 @@ { if (m_targetTemperature != m_currentTemperatureTextFromEditor.toInt()) { m_targetTemperature = m_currentTemperatureTextFromEditor.toInt(); - emit targetTemperatureChanged(m_targetTemperature); + resetTimer(); event->accept(); } m_cursorTimer->stop(); @@ -271,7 +277,12 @@ if (m_targetTemperature != temperature) { m_currentTemperatureTextFromEditor = QString::number(temperature); m_targetTemperature = temperature; - emit targetTemperatureChanged(m_targetTemperature); + resetTimer(); update(); } } + +void ThermoWidget::resetTimer() +{ + m_tempChangedTimer->start(500); +}