同时闪烁多个项目(ex QTableWidgetItem)

时间:2017-07-19 06:01:55

标签: c++ qt qthread qtimer qtablewidgetitem

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

感谢您的阅读。 如果我读书不舒服,我很抱歉。我不擅长英语。

0 个答案:

没有答案