1

我的问题最好通过一个例子来澄清。我有一个Text{}项目的 QML。在 C++ 中,我可以访问该项目,并且我可以毫无问题qobject_cast地将任何内容转换为QQuickItem*. 但是我如何将它变成最接近的对应项,以便我可以像setText()调用相同的方式直接调用更具体的方法setWidth()?我意识到我可以使用通用的 setProperty() 方法,但我在编译时检查了转换提供的功能。

我正在寻找一个更一般的答案来查找 QML 与其 C++ 类之间的对应关系,以便我可以找到如何为 Rectangles、MenuBars 等执行此操作。我似乎在文档中找不到这个。对于那些喜欢代码示例的人:

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

问:但我在编译时检查了转换提供的内容。

qobject_cast 不提供任何编译时检查。它都是运行时和动态的,因此这个请求是不合理的。context 属性很好,或者您也可以使用QMetaObject获取类名。然后,您可以构建一个静态 LUT,但总体而言,这些努力可能不值得......

于 2014-05-03T07:52:48.343 回答