web-dev-qa-db-ja.com

QMLでリストプロパティを宣言する方法

QMLでリストプロパティを宣言するにはどうすればよいですか(私の場合はQt.labs.settingsで使用します)。

Settings {
    property list recentFiles: []
}

動作しません。 list<string>string[]などの他の多くのオプションを試しました。どれも機能していないようです。

11
Timmmm
Settings {
    property var recentFiles: []
}

http://doc.qt.io/qt-5/qml-var.html

8
fat

リストにはQMLオブジェクトのみを格納でき、基本的な型の値を含めることはできません

stringは基本型なので、リストに保存することはできません。そのためには、property var recentFilesを使用することをお勧めします

4
Artem Zaytsev

Listプロパティ( 'list'キーワード)について質問していたので、次の構文が機能しているようです。

property list<Rectangle> rectList: [
    Rectangle { id: a; },
    Rectangle { id: b; }
]

Rectangle { id: c }

Component.onCompleted: {
    console.log("length: " + rectList.length)
    rectList.Push(c)
    console.log("length: " + rectList.length)
}

これは印刷されます

qml: length: 2
qml: length: 3

しかし、「rectList」は次のものも受け入れることがわかります。

MouseArea { id: mArea; }
..
rectList.Push(mArea)

これは意味がありません。また、コマンドの提案/オートコンプリートは、QtCreatorのこの構文では機能しません。これはある種のレガシー構文であり、新しいアプリでは使用しないでください。代わりに、他の回答で提案されたものを使用する必要があります。

プロパティvarmyList:[]

その後、QtCreatorによるサポートが向上します。

そして、「リスト」のドキュメントには[1]と書かれています。

「リストにはQMLオブジェクトのみを格納でき、基本型の値を含めることはできません(リスト内に基本型を格納するには、代わりにvar型を使用してください)。」

したがって、以下はコンパイルされません。

property list<int> intList: []

同じドキュメントにも次のように書かれています。

「注:リストタイプはカスタムプロパティのタイプとしてはお勧めしません。varタイプによって保存されたリストはQML内からより柔軟に操作できるため、代わりにvarタイプを使用する必要があります。」

[1] https://doc.qt.io/qt-5/qml-list.html

2
gatis paeglis