Самый простой способ оживить QGraphicsPixmapItem?

92
12

Я хочу анимировать 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 мой QGraphicsItem *pixmapItem в AnimatedGraphicsItem? (Если да, как?) Должен ли я создать новый экземпляр AnimatedGraphicsItem?

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

Заранее спасибо!

спросил(а) 2015-12-23T17:31:00+03:00 4 года, 10 месяцев назад
1
Решение
100

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

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

ответил(а) 2015-12-23T19:03:00+03:00 4 года, 10 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема