Я хочу оживить 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
).
Других решений пока нет …