C++ 同时闪烁多个项目(例如QTableWidgetItem)
我是第一个尝试QThread的人。所以我需要你的帮助。 如果能给我一点帮助,我将不胜感激 我正在制作一些节目。我想给这个程序添加一些函数。 它有几个从QTablewidget中选择的单元格,我想为每个信号闪烁它们一次。 所以我做了一个函数。下面是该函数的源代码 标题C++ 同时闪烁多个项目(例如QTableWidgetItem),c++,qt,qthread,qtimer,qtablewidgetitem,C++,Qt,Qthread,Qtimer,Qtablewidgetitem,我是第一个尝试QThread的人。所以我需要你的帮助。 如果能给我一点帮助,我将不胜感激 我正在制作一些节目。我想给这个程序添加一些函数。 它有几个从QTablewidget中选择的单元格,我想为每个信号闪烁它们一次。 所以我做了一个函数。下面是该函数的源代码 标题 class KcBlinker : public QObject { Q_OBJECT public: explicit KcBlinker(QTableWidgetItem* item); static
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();
};
KC类闪烁器:公共QObject
{
Q_对象
公众:
显式KcBlinker(QTableWidgetItem*项);
静态标准::地图m_lBgColor;
无效闪烁();
私人:
QTableWidgetItem*m_项目;
void BlinkOn();
专用插槽:
void BlinkOff();
};
cpp
std::map kclonker::m_lBgColor={{KD_BG_NORMAL,QColor(234240229)}
,{KD_BG_SELECT,QColor(158195,87)}
,{KD_BG_BLINK,QColor(96158,49)}
};
KcBlinker::KcBlinker(QTableWidgetItem*item)
{
m_项目=项目;
}
无效KcBlinker::Blink()
{
布林肯();
}
无效KcBlinker::BlinkOn()
{
m_项目->后退(QBrush(m_lBgColor[KD_BG_闪烁]);
QTimer::singleShot(300、this和KcBlinker::BlinkOff);
}
void KcBlinker::BlinkOff()
{
m_项目->收进背景(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();
}
}
void SomeClass::Blink()
{
迭代器位置;
对于(pos=m_lItem.begin();pos!=m_lItem.end();++pos)
{
QTableWidgetItem*item=位置值();
KC闪烁器闪烁(项目);
眨眼,眨眼();
}
}
如果QTablewidgetItem是一个,那么它工作得很好。但是,如果我在多个QTableWidgetItems上尝试此函数,该功能将无法工作。我想是因为时间的关系,但我不知道该怎么办。我应该使用QThread吗
当只有一个QTableWidgetItem处于活动状态时,BlinkOn()和BlinkOff()都起作用。但是,如果我将BlinkOn()和BlinkOff()赋予几个QTableWidgetItem,则只有BlinkOn()函数被打开,而BlinkOff()不被访问
谢谢你的阅读。
如果我在阅读时感到不舒服,我很抱歉。我英语不好。为什么不对所有项目使用相同的计时器?@eyllanesc这是因为它可以单独从选定的单元格获取信号。它们可以同时闪烁,也可以相互闪烁。从您的m_lItem代码中可以看到一组选定的项目,而不是将元素添加到KcBlinker类中,而是添加一个项目列表。您的应用程序不工作是什么意思?您的意思是:不改变颜色或不同时改变颜色?
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();
}
}