我是第一个尝试QThread的人。所以我需要你的帮助。 我会感激一点帮助。
我正在制作一些节目。我想为这个程序添加一些功能。 它有几个从QTablewidget中选择的单元格,我想为每个信号闪烁一次。 所以我做了一个功能。这是该函数的源代码。
头
class KcBlinker : public QObject
{
Q_OBJECT
public:
explicit KcBlinker(QTableWidgetItem* item);
static std::map<int,QColor> m_lBgColor;
void Blink();
private:
QTableWidgetItem* m_item;
void BlinkOn();
private slots:
void BlinkOff();
};
CPP
std::map<int,QColor> KcBlinker::m_lBgColor = { {KD_BG_NORMAL, QColor(234,240,229)}
,{KD_BG_SELECT, QColor(158,195,87)}
,{KD_BG_BLINK, QColor(96,158,49)}
};
KcBlinker::KcBlinker(QTableWidgetItem *item)
{
m_item = item;
}
void KcBlinker::Blink()
{
BlinkOn();
}
void KcBlinker::BlinkOn()
{
m_item->setBackground(QBrush(m_lBgColor[KD_BG_BLINK]));
QTimer::singleShot(300,this,&KcBlinker::BlinkOff);
}
void KcBlinker::BlinkOff()
{
m_item->setBackground(QBrush(m_lBgColor[KD_BG_SELECT]));
}
此功能内部的功能如下。
void SomeClass::Blink()
{
QMap<QString,QTableWidgetItem*>::iterator pos;
for(pos = m_lItem.begin(); pos != m_lItem.end(); ++pos)
{
QTableWidgetItem* item = pos.value();
KcBlinker blink(item);
blink.Blink();
}
}
如果QTablewidgetItem是一个,它运作良好。但是,如果我在多个QTableWidgetItems上尝试此功能,该功能将无法正常工作。我认为这是因为QTimer,但我不知道该怎么做。我应该使用QThread吗?
当只有一个QTableWidgetItem处于活动状态时,BlinkOn()和BlinkOff()都会起作用。但是,如果我将BlinkOn()和BlinkOff()赋予几个QTableWidgetItem,则只打开BlinkOn()函数并且不访问BlinkOff()。
感谢您的阅读。 如果我读书不舒服,我很抱歉。我不擅长英语。