このプロパティは、オブジェクトの名前を保持します。 objectNameはQObjectのQStringプロパティで、デフォルトは空のQStringです。
通常、QtからQML要素を見つける必要があるときにこのプロパティを設定します。これにより、QML要素の信号、プロパティ、機能にQt(C++)コードからアクセスできます。
オートパイロットテストでは、このプロパティを使用してアプリケーションを内省します。
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ガイドライン に従う必要があります。
1:オブジェクトを名前で検索するために使用されます
2:それらすべて、QObjectから取得
3:自動操縦でテストケースからアプリを内観するために使用されます
4:よく分からない
5:IDは外部ツール(オートパイロットなど)から発見できるとは思わない