1

私はこのように定義された機能的なListModelを手に入れました:

ListModel {
    id: leftGrid
    ListElement { icon: "Images/1.png" }
    ListElement { icon: "Images/2.png" }
}

ListElementを別々のqmlファイルで定義したいのですが、どうすればよいかわかりません...

私はこのようにqmlを書きました:

//myWidget.qml
import QtQuick 1.0

ListElement {
    icon: "Images/X.png"
}

しかし、メインファイルでそれを「呼び出す」または「インスタンス化する」方法がわかりません...

私は試した :

ListModel {
    id: leftGrid
    ListElement { icon: "Images/1.png" }
    myWidget //qml file
}

と :

ListModel {
    id: leftGrid
    ListElement { icon: "Images/1.png" }
    ListElement { myWidget }
}

両方とも機能しません...

よろしくお願いします。

4

1 に答える 1

2

ListElements を別のファイルにすることはできないと思います。これは、これを行うと、内容 (この場合は ListElement) を含むコンポーネントが暗黙的に作成されるためです。ただし、ListModel は ListElements のみを子として受け入れることができ、内部にネストされた ListElements を持つコンポーネントは受け入れられません。

ただし、モデル項目を動的に定義するためにできることは、ListModel を宣言してから、Component.onCompleted ハンドラーなどで javascript を介してデータを追加することです。

ListModel の API を見ると、append() メソッドなどがあることがわかります。このメソッドに JS ディクショナリを渡すと、リストに新しい ListElement が追加され、ディクショナリに従ってそのプロパティが設定されます。

例:

import QtQuick 1.0

Rectangle {
    width: 360
    height: 360

    ListView {
        id:list
        anchors.fill: parent
        model: ListModel {
            ListElement { foo: "hello" }
        }
        delegate: Text {
            text: foo
            width: ListView.view.width
        }

        Component.onCompleted: {
            list.model.append({ "foo": "world" })
        }
    }
}

リストには、「hello」と「world」の 2 つの項目が表示されます。

于 2011-10-08T17:18:50.520 に答える