1

私の質問は、例によって最も明確になります。私はアイテムでQMLを持っていText{}ます。C++ では、この項目に到達でき、問題なく使用qobject_castして何かをQQuickItem*. setText()しかし、それを最も近い対応するアイテムに変換して、より具体的なメソッドを呼び出すのと同じように直接呼び出すにはどうすればよいsetWidth()でしょうか? 一般的な setProperty() メソッドを使用できることはわかっていますが、コンパイル時にキャストが提供されていることを確認しています。

Rectangles、MenuBarsなどでこれを行う方法を見つけることができるように、QMLとそのC++クラスの間の対応を見つけるためのより一般的な答えを求めています。ドキュメントでこれを見つけることができないようです。コード例を好む人のために:

auto text_object = app_item->findChild<QObject*>("myTextArea");
text_object->setProperty("text","New Text set from Code"); //THIS WORKS BUT...
auto text_qitem = qobject_cast<QQuickItem*>(text_object);
text_qitem->setWidth(128);
auto text_quick_text = qobject_cast<WHATGOESHERE???*>(text_object);
text_quick_text->setText("new Text for qml item");  //I WANT TO DO THIS
4

1 に答える 1

1

Q: しかし、私はコンパイル時間の後で、キャストが提供するものをチェックしています。

qobject_cast は、コンパイル時のチェックを提供しません。それはすべてランタイムで動的であるため、この要求は妥当ではありません。context プロパティは問題ありません。または、QMetaObjectでクラス名を取得することもできます。次に、静的な LUT を作成することもできますが、全体としてはその労力に見合わないかもしれません...

于 2014-05-03T07:52:48.343 に答える