Задача: сделать анимацию перемещения для своего класса, унаследованного от QGraphicsPixmapItem.
Делал так:
card.h
class Card : public QObject, public QGraphicsPixmapItem
{
Q_OBJECT
Q_PROPERTY(QPointF pos READ pos WRITE setPos)
public:
Card();
~Card();
QPointF pos() const;
void setPos(QPointF newPos);
protected:
void mousePressEvent(QGraphicsSceneMouseEvent *event);
};
card.cpp
Card::Card()
{
this->setPixmap(QPixmap(":/card.jpg"));
this->setPos(QPointF(10, 10));
}
Card::~Card()
{
}
QPointF Card::pos() const
{
return QPointF(this->x(), this->y());
}
void Card::setPos(QPointF newPos)
{
this->setX(newPos.x());
this->setY(newPos.y());
}
void Card::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
// it works!
// this->setPos(QPointF(100, 100));
QPropertyAnimation anim(this, "pos");
anim.setDuration(1000);
anim.setEndValue(QPointF(100, 100));
anim.start();
}
По идее, по клику на карточке, должно произойти перемещение, но его не происходит. Если вручную сделать this->setPos(QPointF(100, 100));
, то позиция меняется.
ЧЯДНТ?
Архив с исходниками, если кому надо.