Workaround for audio meter widget getting stuck

This commit is contained in:
HomeWorld 2014-07-23 11:46:42 +03:00
parent 5da8d14570
commit 6036857232
2 changed files with 21 additions and 1 deletions

View file

@ -6,6 +6,7 @@
#include <QSlider> #include <QSlider>
#include <QLabel> #include <QLabel>
#include <QPainter> #include <QPainter>
#include <QTimer>
#include <string> #include <string>
#include <math.h> #include <math.h>
@ -178,8 +179,17 @@ VolumeMeter::VolumeMeter(QWidget *parent)
peakColor.setRgb(0x3E, 0xF1, 0x2B); peakColor.setRgb(0x3E, 0xF1, 0x2B);
peakHoldColor.setRgb(0x00, 0x00, 0x00); peakHoldColor.setRgb(0x00, 0x00, 0x00);
resetTimer = new QTimer(this);
connect(resetTimer, SIGNAL(timeout()), this, SLOT(resetState()));
resetState();
}
void VolumeMeter::resetState(void)
{
setLevels(0.0f, 0.0f, 0.0f); setLevels(0.0f, 0.0f, 0.0f);
if (resetTimer->isActive())
resetTimer->stop();
} }
void VolumeMeter::setLevels(float nmag, float npeak, float npeakHold) void VolumeMeter::setLevels(float nmag, float npeak, float npeakHold)
@ -187,7 +197,13 @@ void VolumeMeter::setLevels(float nmag, float npeak, float npeakHold)
mag = nmag; mag = nmag;
peak = npeak; peak = npeak;
peakHold = npeakHold; peakHold = npeakHold;
update(); update();
if (resetTimer->isActive())
resetTimer->stop();
resetTimer->start(250);
} }
void VolumeMeter::paintEvent(QPaintEvent *event) void VolumeMeter::paintEvent(QPaintEvent *event)
@ -225,7 +241,7 @@ void VolumeMeter::paintEvent(QPaintEvent *event)
bkColor); bkColor);
// Peak hold // Peak hold
if(peakHold == 1.0f) if (peakHold == 1.0f)
scaledPeakHold--; scaledPeakHold--;
painter.setPen(peakHoldColor); painter.setPen(peakHoldColor);

View file

@ -9,11 +9,15 @@ class VolumeMeter : public QWidget
private: private:
float mag, peak, peakHold; float mag, peak, peakHold;
QColor bkColor, magColor, peakColor, peakHoldColor; QColor bkColor, magColor, peakColor, peakHoldColor;
QTimer *resetTimer;
public: public:
explicit VolumeMeter(QWidget *parent = 0); explicit VolumeMeter(QWidget *parent = 0);
void setLevels(float nmag, float npeak, float npeakHold); void setLevels(float nmag, float npeak, float npeakHold);
protected: protected:
void paintEvent(QPaintEvent *event); void paintEvent(QPaintEvent *event);
private slots:
void resetState();
}; };
class QLabel; class QLabel;