2015-12-23 7 views
0

Я хочу анимировать QGraphicsPixmapItem в моем QGraphicsScene, с QPropertyAnimation.Самый простой способ анимации QGraphicsPixmapItem?

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?

Я не нашел хороший пример в Интернете.

Заранее благодарен!

ответ

0

Хорошо, понял.

я должен был создать экземпляр мои AnimatedGraphicsItem объекта, затем setPixmap, setFlag ... и addItem к моей сцене (и это было важно использовать new).