本文主要是介绍通过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对象的闪动。
这篇关于通过QTimer给QGraphicsItem加一个闪动功能的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!