2013-11-01 5 views
0

У меня есть куча QR-предложений и некоторый текст в QGraphicsScene, который я пытаюсь оживить с помощью QPropertyAnimation. Анимационный текст отлично работает, но QRects не работает, потому что они не в состоянии преобразовать в QGraphicsObjectАнимация QRect с QPropertyAnimation

Это отлично работает

QPropertyAnimation *a = new QPropertyAnimation(this); 
a->setTargetObject(items[size.x()*size.y()-1-aa]->toGraphicsObject()); //text 
a->setPropertyName("pos"); 
a->setDuration(animationLength); 
a->setStartValue(items[size.x()*size.y()-1-aa]->pos()); 
a->setEndValue(newTextPos); 
a->setEasingCurve(easingCurve); 
a->start(QAbstractAnimation::DeleteWhenStopped); 

Но это не так, потому что элементы [2 * size.x() * size.y() - 2-aa] -> toGraphicsObject() возвращает нулевой указатель.

QPropertyAnimation *a = new QPropertyAnimation(this); 
a->setTargetObject(items[2*size.x()*size.y()-2-aa]->toGraphicsObject()); //rect 
a->setPropertyName("pos"); 
a->setDuration(animationLength); 
a->setStartValue(items[2*size.x()*size.y()-2-aa]->pos()); 
a->setEndValue(newRectPos); 
a->setEasingCurve(easingCurve); 
a->start(QAbstractAnimation::DeleteWhenStopped); 

Есть ли способ исправить это?

+1

QRect не является графическим элементом, вы имеете в виду QGraphicsRectItem? –

+0

ну, может быть. Я добавил исправления с помощью QGraphicsScene :: addRect – Ben

ответ

0

toGraphicsObject возвращает null указатель, потому что QGraphicsRectItem не является QGraphicsObject. Вы не можете использовать QGraphicsRectItem для выполнения анимации. Я могу предложить два обходные пути:

  1. свойство Создать свой собственный класс, производный от QObject и QGraphicsRectItem, создать «Pos» и реализовать его геттер и сеттер. См. Пример here.
  2. Создайте свой собственный класс, полученный от QGraphicsObject. Внесите свои boundingRect и paint чистые виртуальные методы, чтобы рисовать прямоугольник.
+0

Спасибо, я получил его работу, создав пользовательский объект QGraphicsObject. – Ben