Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 同时闪烁多个项目(例如QTableWidgetItem)_C++_Qt_Qthread_Qtimer_Qtablewidgetitem - Fatal编程技术网

C++ 同时闪烁多个项目(例如QTableWidgetItem)

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

我是第一个尝试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();

};
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();
    }
}