我想用QGraphicsPixmapItem
为QGraphicsScene
中的QPropertyAnimation
设置动画。
QPixmap pixmap(filePath);
QGraphicsItem *pixmapItem = graphicsScene->addPixmap(pixmap);
QPropertyAnimation animation(pixmapItem, "x"); // here lies the problem
animation.setDuration(30000);
// ...
animation.start();
我检查了文档,所以我已经知道
QGraphicsPixmapItem
及其父级QGraphicsItem
不是QObject
,并且不存在带有QPropertyAnimation
的QGraphicsItem
构造函数。根据各种消息来源,最好的方法是创建一个新类,例如从AnimatedGraphicsItem
和QObject
继承的QGraphicsItem
或者我可以简单地从QGraphicsObject
继承。class AnimatedGraphicsItem : public QObject, public QGraphicsItem // or public QGraphicsObject
{
Q_OBJECT
Q_INTERFACES(QGraphicsItem) // not needed if I inherit from QGraphicsObject, right?
};
我需要在
AnimatedGraphicsItem
类的头文件和源文件中准确包含什么?一位消息人士告诉我,它也要包含在头文件中,但是我认为,这已经被继承了吗?public:
AnimatedGraphicsItem(QGraphicsItem *parent = 0);
private:
virtual QRectF boundingRect() const;
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
以及如何使用我的
AnimatedGraphicsItem
类?我必须将我的
QGraphicsItem *pixmapItem
强制转换为AnimatedGraphicsItem
吗? (如果是,如何?)是否必须创建AnimatedGraphicsItem
的新实例?我在互联网上找不到很好的例子。
提前致谢!
最佳答案
好,知道了。
我必须实例化我的AnimatedGraphicsItem
对象,然后实例化setPixmap
,setFlag
,…和addItem
到我的场景(使用new
很重要)。