0

車をパスに沿って動かしたいので、PySide のドキュメントに記載されている例から始めて、QPropreties を使用してカスタム QGraphicsItem (「車」を記述) をアニメーション化してみました:

  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.carQGraphicsItemこれは Car のインスタンスで、 andを継承するクラスですQObject( EDITこれを変更しました。 を参照してください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 ( PySide のドキュメントを参照) を入れてみましたが、何も変わりませんでした。

それがどこから来るのかについて何か考えはありますか?

編集:役立つもの -> これらの 3 行を入れてみましたが、結果はオブジェクトが考慮されていないことを示しています:

  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

EDIT 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)
4

2 に答える 2

1

解決策は、最初に継承を からQGraphicsItemQObjectに変更することでしたQGraphicsObject。次に、2 つ目のエラーは、プロパティ (x と y) を正しく定義しなかったことです。

QGraphicsObjectの " pos" プロパティを使用し、正しい開始値と終了値 (タプル) を与えるようにクラスを再実装することになりました。

于 2013-04-02T17:21:51.520 に答える