3

Qt のドキュメント ( http://qt-project.org/doc/qt-4.8/declarative-modelviews-objectlistmodel.htmlで入手できます) の「Object ListModel Example」という例を拡張したいと思います。

シンプルな GUI 機能を追加しようとしています: モデルの最初のデータ項目の内容 (名前など) を変更するメニュー項目です。このようなもの:

MenuItem {
  text: "Item 123"
  onClicked: {
    myModel.setProperty(0,"name","Item 123") //this gives me error
  }
}

QML でメニューを作成できますが、モデルを変更する正しい方法が見つかりません。

ところで、setContextProperty と qmlRegisterType の違いは何ですか (この例では最初のものだけが使用されていますが、他の多くの例には 2 番目のものが含まれています)。

4

1 に答える 1

3

そのようなモデルは改造には適していません。ビューが変更を通知される方法はありません。より良いオプションは、QAbstractItemModel を使用することです: http://qt-project.org/doc/qt-4.8/declarative-modelviews-abstractitemmodel.html

QAbstractItemModel を使用する簡単な方法は、QStandardItemModel を使用することです: http://qt-project.org/doc/qt-4.8/qstandarditemmodel.html

setContextProperty() は、単一の名前付きプロパティをコンテキストに追加します。qmlRegisterType() は、QObject 派生型を QML エンジンに登録し、その型をインスタンス化できるようにします。たとえば、QDeclarativeItem タイプは「Item」としてエンジンに登録されます。これは、エンジンがItem {}QML コードに表示されたときに何を作成するかを認識する方法です。

于 2012-08-06T00:06:51.153 に答える