0

次のQMLコンポーネントがあるとしましょう。

Foo.qml

import Qt 4.7

Rectangle {
  Repeater {
    model: myModel
    delegate: Bar {
      barProp: elemProp
    }
  }
}

Bar.qml

import Qt 4.7

Rectangle {
  property string barProp: ""

  Text {
    text: barProp

    NumberAnimation on x {
      from: 0; to: 100
      duration: 1000
      loops: Animation.Infinite
    }
  }
}

myModelをC++から保守していますが、次のQ_PROPERTY宣言があります。

Q_PROPERTY (QDeclarativeListProperty <Bar> myModel READ myModel
            NOTIFY myModelChanged)

さて、私の問題は、基になる要素に新しい要素を追加するたびに、QList指定されたアニメーションがBarリセットされるため、実際には、要素は常に完全にオーバーラップすることです。私が欲しいのは、要素のアニメーションが同期しておらず、残りの部分に関係なく、それぞれがシームレスに続行できることです。これは可能ですか?

乾杯

4

1 に答える 1

1

QListではなくQAbstractItemModel(QStandardItemModelが最も簡単な場合があります)を使用する必要があります。QAbstractItemModelは、新しいアイテムが挿入/削除/移動されたときにビューに通知し、ビューはそのコンテンツを変更することで適切に反応します。対照的に、ビューはQListに加えられた変更について何も知りません。何かが変わっただけです。これは、リストがすべてのデリゲートを破棄して再作成する以外に選択肢がないことを意味します。

于 2011-04-27T23:39:26.630 に答える