2013-11-01 6 views
0

QPropertyAnimation으로 애니메이션하려고하는 QGraphicsScene에 여러 개의 QRect와 일부 텍스트가 있습니다. 텍스트 애니메이션은 잘 작동하지만,이 QGraphicsObject로 변환하는 데 실패하기 때문에 QRects가 작동하지 않습니다QPropertyAnimation을 사용하여 QRect에 애니메이션 적용

이 완벽하게

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를 사용하여 rect를 추가했습니다. – Ben

답변

0

toGraphicsObjectQGraphicsRectItemQGraphicsObject이 아니므로 null 포인터를 반환합니다. QGraphicsRectItem을 사용하여 애니메이션을 수행 할 수 없습니다. 나는 두 가지 해결 방법을 제안 할 수 있습니다 :

  1. 만들고, 자신의 클래스가 QObjectQGraphicsRectItem에서 파생 만들기 "POS"속성을하고 getter와 setter를 구현합니다. 예 here을 참조하십시오.
  2. QGraphicsObject에서 파생 된 나만의 클래스를 만듭니다. boundingRectpaint 순수 가상 메서드를 구현하여 사각형을 페인트합니다.
+0

고마워요, 커스텀 QGraphicsObject를 만들어서 작동 시켰습니다. – Ben