17 : QFrame(parent), m_redrawTimer(new QTimer(this)), m_lowColor(Qt::gray), m_highColor(Qt::green),
18 m_peakColor(255, 200, 200, 255)
20 this->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
21 this->setMinimumWidth(30);
23 connect(m_redrawTimer, &QTimer::timeout,
this, &CLevelMeter::redrawTimerExpired);
24 m_redrawTimer->start(RedrawInterval);
25 m_redrawTimer->setObjectName(
"CLevelMeter");
40 if (level > m_peakLevel)
43 m_peakLevelChanged.start();
47 void CLevelMeter::redrawTimerExpired()
50 if (m_peakLevelChanged.elapsed() > PeakHoldLevelDuration)
52 m_peakLevel -= DecayValue;
53 if (m_peakLevel < m_level || m_peakLevel < 0) { m_peakLevel = 0.0; }
62 QPainter painter(
this);
63 QRect bar = this->contentsRect();
64 painter.fillRect(bar, Qt::transparent);
65 const int w = bar.width();
66 const int left = rect().left();
67 const int level = qRound(m_level * w);
71 painter.fillRect(bar, m_peakLevel >= High ? m_highColor : m_lowColor);
73 if (m_peakLevel > m_level)
75 const int peak = qRound(m_peakLevel * w);
78 painter.fillRect(bar, m_peakColor);
void paintEvent(QPaintEvent *event)
void levelChanged(double level)
Values.
virtual ~CLevelMeter()
Destructor.
CLevelMeter(QWidget *parent=nullptr)
Constructor.