我想用QGraphicsPixmapItemQGraphicsScene中的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,并且不存在带有QPropertyAnimationQGraphicsItem构造函数。根据各种消息来源,最好的方法是创建一个新类,例如从AnimatedGraphicsItemQObject继承的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对象,然后实例化setPixmapsetFlag,…和addItem到我的场景(使用new很重要)。

07-28 01:04