QMLのpropertyに、variantを使用してJavaScriptの配列やマップ・JavaScriptObjectを保存する事ができます。
ですが、この内容を直接更新する事ができません。
詳細は、「QML Basic Type: variant」に書いてある通りです。
英語に抵抗がないとかサンプル読んでさらっと理解できるならこの記事不要です。
解決方法として以下の3つが紹介されてます。
・更新するメソッド内で一端ローカル変数にコピーする。
(いちいち内容がコピーされて遅いのでオススメしない。)
・C++でオリジナルの配列(リスト管理)エレメントを作成する。
・JavaScriptファイルに実体を宣言する。
結論を先に書いたのでこれで納得な人はお疲れ様でした。
以下、状況を具体的に説明します。
まず、こんな感じで保存してくれます。
これをどこかのメソッドとかでこんな感じで内容にアクセスできます。
特に違和感ありません。
ですが、これをするとエラーもなく華麗にスルーされます。
pushしてるのに配列のサイズが増えない!?初め何事かと思いました。
一番実行速度が遅いけど簡単にできる解決策として
これで一応対処できます。
JavaScriptファイルに実体を置くのが現実的な感じでしょうか。
<Category : Qt>
ですが、この内容を直接更新する事ができません。
詳細は、「QML Basic Type: variant」に書いてある通りです。
英語に抵抗がないとかサンプル読んでさらっと理解できるならこの記事不要です。
解決方法として以下の3つが紹介されてます。
・更新するメソッド内で一端ローカル変数にコピーする。
(いちいち内容がコピーされて遅いのでオススメしない。)
・C++でオリジナルの配列(リスト管理)エレメントを作成する。
・JavaScriptファイルに実体を宣言する。
結論を先に書いたのでこれで納得な人はお疲れ様でした。
以下、状況を具体的に説明します。
まず、こんな感じで保存してくれます。
property variant list: ["item1", "item2"]
これをどこかのメソッドとかでこんな感じで内容にアクセスできます。
for(i=0; i<g_list.length; i++){ console.debug("i(" + i + "):" + g_list[i]); }
特に違和感ありません。
ですが、これをするとエラーもなく華麗にスルーされます。
g_list.push("add");
pushしてるのに配列のサイズが増えない!?初め何事かと思いました。
一番実行速度が遅いけど簡単にできる解決策として
var l_list = g_list; l_list.push("add"); g_list = l_list;
これで一応対処できます。
JavaScriptファイルに実体を置くのが現実的な感じでしょうか。