我的问题最好用一个例子来说明。我有带有 Text{}
项的 QML。在 C++ 中,我可以找到这个项目,使用 qobject_cast
将任何东西变成 QQuickItem*
也没有问题。但是如何将它变成最接近的对应项,以便我可以像调用 setWidth()
一样直接调用更具体的方法,如 setText()
?我意识到我可以使用通用的 setProperty() 方法,但我在编译时间之后检查转换提供的内容。
我正在寻找一个更通用的答案来找到 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
最佳答案
Q: but I'm after the compile time checking that casting offers.
qobject_cast 不提供任何编译时检查。它都是运行时和动态的,因此这个请求是不合理的。上下文属性很好,或者您也可以使用 QMetaObject 获取类名.然后,您可以构建一个静态 LUT,但总的来说,这种努力可能不值得……
关于c++ - 如何在 Qt Quick 中将 QML 项转换为相应的 C++ 项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23436416/