2017-07-12 9 views
0

findChild()とC++のようなオブジェクトを見つけるにはどうすればよいですか?QmlのobjectNameでjavascriptからオブジェクトを取得するには?

+0

なぜこれをやりたいですか?あなたはC++からであってはいけないので、JSからやってはいけません。 Mayeあなたはむしろ何かに頼ることなく謎を解くことができる方法を尋ねるべきです。findChild() 'ish。 – derM

答えて

1

QML側では、通常、Qt/C++側の親子関係にアクセスすることはできませんが、視覚的な親子関係のみにアクセスできるため、C++に頼る必要があります。

QObjectと名前を持つメソッドを公開するオブジェクトを作成し、このオブジェクトの関数findChildを呼び出します。

視覚的な子だけを探したい場合は、JS内のビジュアルツリー上に再帰的なbfsを実装し、これを呼び出すことができます。

しかし、私がコメントしたように:もしあなたがこれを必要とするなら、あなたはたぶん別の場所でうんざりして、findChild()なしでそれをやるべき方法について考えるべきでしょう。これを使うのはC++ではお勧めできませんが、QMLではそうではありません。
再帰的検索であるため、パフォーマンスを低下させるのに最善を尽くします。 UIには簡単に何千もの要素が含まれており、常にstringを比較する必要があります。さらに依存している人には、あなたが依存していることを知らせていないものに忍び寄ってアクセスすることによって、依存関係について嘘をつきます。

objectNamefindChildを呼び出すオブジェクトがコードの同じ論理部分にない可能性があります。したがって、誰かがこのオブジェクトまたはobjectNameを変更する可能性がある場合、簡単に壊れてしまいます。もう存在しない。

さらに、オブジェクト名が正しくタイプされているとは限らないため、正しいタイプであることが保証されています。正しいオブジェクトです。

このようなオブジェクトにアクセスするには、デザイン全体が最適ではありません。

免責事項:私はそれに私の時間を無駄にしたくないので、私の提案された解決策を試していない。

+0

'text'コンポーネントのテキストプロパティを変更したい。私は次のJSON '' {"id": "text1"、 "newText": "Pizza"}、{"id": "text1"、 "newText": "Ramen"}] 'を持っています。 Idは、テキストコンポーネントのobjectNameおよびidです。このIDのテキストを取得するには? – Usmiech

+0

私は自分自身の関数 'getObjectByName(name)'を書くことによってそれを行うことができました。幸いにも、私のすべてのオブジェクトは 'container'にあったので、' itemAt(i).objectName'と 'contentChildren'を使って線形検索を行うことができました。それを行うのは正しい方法ですか? – Usmiech

関連する問題