質問: qmlのobjectname:プロパティとは何ですか、なぜ必要なのですか?id:プロパティとはどう違うのですか? qmlのobjectname:プロパティとは何ですか? このプロパティを持つコンポーネントはどれですか? なぜ必要なのですか? id:プロパティとどう違うのですか? 代わりにid:プロパティを使用できないのはなぜですか?
回答: このプロパティは、オブジェクトの名前を保持します。 objectnameはqobjectのqstringプロパティで、デフォルトは空のqstringです。通常、qtからqml要素を見つける必要があるときにこのプロパティを設定します。これにより、qml要素の信号、プロパティ、機能にqt(c++)コードからアクセスできます。オートパイロットテストでは、このプロパティを使用してアプリケーションを内省します。 c++のqmlオブジェクトと対話する :qmlコンポーネントは、基本的には兄弟を持つ子と独自の子を持つオブジェクトツリーです。 qmlコンポーネントの子オブジェクトは、 qobject :: objectname プロパティと qobject :: findchild() を使用して見つけることができます。たとえば、myitem.qmlのルートアイテムに子のrectangleアイテムがある場合:import qtquick 2.0 item { width: 100; height: 100 rectangle { anchors.fill: parent objectname: "rect" } } 子は次のように配置できます。qobject *rect = object->findchild<qobject*>("rect"); if (rect) rect->setproperty("color", "red"); オブジェクトには、同じobjectnameを持つ複数の子があることに注意してください。たとえば、listviewはデリゲートの複数のインスタンスを作成するため、デリゲートが特定のobjectnameで宣言されている場合、listviewには同じobjectnameを持つ複数の子があります。この場合、 qobject :: findchildren() を使用して、一致するobjectnameを持つすべての子を検索できます。 警告:c++を使用して、オブジェクトツリーの奥深くにあるqmlオブジェクトにアクセスして操作することは可能ですが、このアプローチを外部から行わないことをお勧めしますアプリケーションのテストとプロトタイピング。 qmlとc++の統合の強みの1つは、c++ロジックおよびデータセットバックエンドとは別にqmlユーザーインターフェイスを実装できることです。c++側がqmlコンポーネントを深く操作して直接操作すると、この戦略が破られます。これにより、たとえば、新しいコンポーネントに必要なobjectnameが欠落している場合、qmlビューコンポーネントを別のビューに交換することが難しくなります。 c++実装では、qmlユーザーインターフェイスの実装とqmlオブジェクトツリーの構成について、できるだけ少ししか知らない方がよいでしょう。 objectname がテストに必要な場合、これは間違いなく価値があります。不要な場合、objectnameは明らかに追加しないでください。それらを追加するときは、 パフォーマンスに関する一般的なqmlガイドライン に従う必要があります。ソース: objectnamesをqmlアイテムに追加するとメモリにどのような影響がありますか?