LINUX.ORG.RU

Анимирование изменения позиции QGraphicsPixmapItem

 


0

1

Задача: сделать анимацию перемещения для своего класса, унаследованного от 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));, то позиция меняется.

ЧЯДНТ?

Архив с исходниками, если кому надо.

★★★★

Последнее исправление: HerrWeigel (всего исправлений: 1)

anim умирает при выходе из функции.

QPropertyAnimation* anim = new QPropertyAnimation(this, «pos»);

и так далее.

dib2 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.