12

オブジェクト名を QObject に追加する必要があるのはなぜですか? 名前を設定しなくても、オブジェクトを読み込んで実行できます。

4

4 に答える 4

18

それは、後でQObjectにアクセスする方法によって異なります。QObjectへのアクセスを取得するために使用できるQObject.find()関数がいくつかあります。名前は、検索をフィルタリングするための「キー」を追加します。

たとえば、独自のクラスでは、検索を行う代わりにインスタンス変数を使用する可能性がありますが、実際には通常は所有していないものが渡される可能性がありますが、編集する特定のボタンがあることはわかっています(たとえば、 Qtの組み込みQInputDialogsの1つにあるQPushButton)。ボタンに名前を付けると、見つけやすくなります(ボタンが消えたり、レイアウト内を移動したりする場合などは堅牢です)が、ボタンのテキストを確認したり、階層内のどこにあるかを数えたりすると、はるかに壊れやすくなります(例:ボタンテキストはバージョン間またはローカリゼーションのために変更される可能性があり、誰かが新しいレイアウト、追加のボタンを追加します)。

または、ポインタ値を出力するときに、いくつかの優れたデバッグテキストが必要な場合もあります(つまり、どのQObjectが問題を引き起こしているのかを知りたい場合)。また、スクリプトが簡単になりますが、その理由についてはここでは説明しません。

これは本当に氷山の一角にすぎません。名前を設定する必要があるのは、必要があり、その答えを知っているのはあなただけです。:-)

于 2012-04-04T10:30:40.073 に答える
16

オブジェクトの名前をQt スタイル シートのID セレクターとして使用できます。

例: プロパティを 1 つの特定の QLineEdit にのみ適用する場合は、QObject::setObjectName() を使用して名前を付け、ID セレクターを使用してそれを参照できます。

 myDialog->setStyleSheet("QLineEdit#nameEdit { background-color: yellow }");
于 2012-04-05T14:33:20.477 に答える
7

いくつかの理由があります。私がオブジェクト名を使用する大きな理由の 1 つは、Qt qdebug ガイドで概説されているように、デバッグ目的のためです。

于 2012-04-04T10:29:10.403 に答える
5

オブジェクトがスクリプト可能で、このように findChild で使用できる場合に意味があります。

//button is the object name, which needs to be define in qml for the component.e.g. objectName: "button"
QObject *buttonQML = view.rootObject()->findChild<QObject*>("button"); 

ここで、「ボタン」はオブジェクト名です

于 2012-04-04T10:25:01.743 に答える