通过QTimer给QGraphicsItem加一个闪动功能

如果给继承自QGraphicsItem的类加一个闪动功能,比如闪动的图标、背景等等,通过QTimer来完成的理念很简单,只需在timer发出 timeout信号时,再让这个timer启动,然后反复闪动就可以。我们可以考虑给继承自QGraphicsItem的类加上如下的两个函数,一个控制闪动的开始和结束,一个用来变换闪动的颜色。

void QGraphicsCustomizedItem::setFlash(bool _enabled){ //通过这个函数来控制闪动的起始和结束
    if(_enabled){
        timer.start(flashFreq);
    }
    else{
        timer.stop();
        setFrameColor(QColor(255,0,0));//默认设置成红色
    }
}

void QGraphicsCustomizedItem::doFlash(){//每次timeout时,设置红绿变色
    if(frame.brush().color() == QColor(255,80,80)){
        setFrameColor(QColor(0,255,0));
    }
    else{
        setFrameColor(QColor(255,0,80));  
    }
}

剩下的,我们需要的仅仅是把timer的timeout信号和doFlash结合起来,但是QGrahpicsItem并非继承自QObject,不能够直接通过connect把timeout和doFlash连起来。但是我们可以编写下面的辅助类FlashObject,来完成此工作:
class QGraphicsCustomizedItem;
class FlashObject : public QObject{
    Q_OBJECT
  
private:
        QGraphicsCustomizedItem* item;
public:
        FlashObject(QGraphicsCustomizedItem* _i){item = _i;}
public slots:
        void flash();
};

void FlashObject::flash(){
    item->doFlash();
}

这样的话,可以在QGraphicsCustomizedItem类对象内增加一个FlashObject的对象,可以直接把timeout信号和flash槽结合起来,完成QGraphicsCustomizedItem对象的闪动。


 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

socratescli

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值