Я хочу использовать объект QTimer для управления состоянием светодиодного индикатора.Класс QLed
, унаследованный QWidget
, создан для управления светодиодным индикатором.Ниже приведены две его важные функции:
void QLed::setLEDFlashing(bool value)
{
ledStatus = value; //Boolean value to accept a user-defined LED status
m_value = ledStatus; //m_value is used in painting LED (with QtSvgRenderer)
QTimer ledTimer;
ledTimer.setInterval(300);
if(!ledTimer.isActive())
{
ledTimer.start();
}
//Here is the connection between the timer and this (i.e., QLed*) object
connect(&ledTimer, SIGNAL(timeout()), this, SLOT(setLEDFlashingTimerHandler()));
}
//I want to use this function to make LED keep flashing
void QLed::setLEDFlashingTimerHandler()
{
//qDebug()<<"setLEDFlashingTimerHandler()";
if (ledStatus)
{
m_value = TRUE;
ledStatus = FALSE;
}
else
{
m_value = FALSE;
ledStatus =TRUE;
}
}
//This is to paint the LED widget
void QLed::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true);
//based on m_value, different svg file is loaded
if(m_value)
ledShapeAndColor.append(colors[m_onColor]);
else
ledShapeAndColor.append(colors[m_offColor]);
renderer->load(ledShapeAndColor);
renderer->render(&painter);
//qDebug()<<"paintEvent m_value="<<m_value;
}
В mainwindow.ui
я добавляю объект QLabel
(с именем led
) и повышаю его до QLed
, а в mainwindow.cpp
:
ui->led->setLEDFlashing(TRUE);
Приведенные выше коды не могут привести к миганию светодиодного индикатора.На самом деле, связь между ledTimer
и setLEDFlashingTimerHandler
по какой-то причине НЕ вступает в силу, и m_value
не обновляется в paintEvent
.Кто-нибудь может помочь отладить мои коды?Спасибо!
Правки:
Я решил проблему с подключением, используя QTimer *ledTimer
вместо QTimer ledTimer
.Но рисование все еще не работает должным образом, так как m_value
не обновляется в этой функции или функция вызывается только в первый раз?