我想打個車遵循的路徑,所以我嘗試動畫自定義的QGraphicsItem(描述了一個「車」)使用QPropreties,通過對PySide文檔給出的例子開始:動畫自定義的QGraphicsItem與QPropretyAnimation
self.anim = QtCore.QPropertyAnimation(self.car, "geometry")
self.anim.setDuration(4000);
self.anim.setStartValue(QtCore.QRect(0, 0, 100, 30));
self.anim.setEndValue(QtCore.QRect(250, 250, 100, 30));
self.anim.start();
self.car
這裏是汽車的一個實例,從QGraphicsItem
和QObject
繼承的類(編輯改變了這種見EDIT 2
):
class Car(QtGui.QGraphicsItem, QtCore.QObject):
def __init__(self, map = None, ....):
super(Car, self).__init__()
self.map = map
....
執行這個時候我總是得到相同的錯誤代碼:
QPropertyAnimation::updateState (geometry): Changing state of an animation without target
這是怪異的目標真定!我試着把setTargetObject(請參閱documentation on PySide),但它沒有改變任何東西。
任何想法可能來自哪裏?
編輯:的東西,可以幫助 - >我試圖把這些三線,結果表明該對象沒有考慮到:
print self.car
self.anim.setTargetObject(self.car)
print self.anim.targetObject()
結果
<engine.Car(this = 0x43f9200 , parent = 0x0 , pos = QPointF(0, 0) , z = 0 , flags = (ItemIsMovable | ItemIsSelectable)) at 0x1de0368>
None
編輯2:將類繼承更改爲QGraphicsObject
似乎解決了'沒有目標'的問題!但我有一個不同的錯誤,現在(使用自定義的屬性「POS」):
QPropertyAnimation::updateState (pos, Car,): starting an animation without end value
我定義我的財產那樣:
def setPos(self, pos):
self.x = pos[0]
self.y = pos[1]
self.update()
def readPos(self):
return (self.x, self.y)
pp = QtCore.Property('tuple', readPos, setPos)
'QGraphicsItem'沒有幾何屬性。你可能想要爲'boundingRect'(我認爲是不可能的)或者你自己創建的一些其他屬性(它控制你繪製汽車的大小)創建動畫。 –