C++ 如何将QML项转换为相应的C++;Qt-Quick中的项目

C++ 如何将QML项转换为相应的C++;Qt-Quick中的项目,c++,qt,qtquick2,qobject,qtquickcontrols,C++,Qt,Qtquick2,Qobject,Qtquickcontrols,我的问题最好用一个例子来说明。我有一个带有Text{}项的QML。在C++中,我可以使用这个项目,我没有问题,使用 QObjtCaseCase将任何东西转换成 QQuijy*。但是,如何将其转换为最接近的对应项,以便可以像调用setxt()一样直接调用更具体的方法?我意识到我可以使用泛型setProperty()方法,但我正在进行casting提供的编译时检查 我在寻找一个更一般的答案,寻找QML和C++类之间的对应关系,这样我就可以知道如何为矩形、菜单条等等做这些了。对于那些喜欢代码示例的人:

我的问题最好用一个例子来说明。我有一个带有
Text{}
项的QML。在C++中,我可以使用这个项目,我没有问题,使用<代码> QObjtCaseCase<代码>将任何东西转换成<代码> QQuijy*。但是,如何将其转换为最接近的对应项,以便可以像调用
setxt()
一样直接调用更具体的方法?我意识到我可以使用泛型setProperty()方法,但我正在进行casting提供的编译时检查

我在寻找一个更一般的答案,寻找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
autotext\u object=app\u item->findChild(“myTextArea”);
text_object->setProperty(“text”,“从代码中设置的新文本”)//这是可行的,但是。。。
自动文本\u qitem=qobject\u cast(文本\u对象);
文本->设置宽度(128);
自动文本\u快速\u文本=qobject\u cast(文本\u对象);
text\u quick\u text->setText(“qml项的新文本”)//我想这样做
问:但是我正在检查casting提供的编译时


qobject_cast不提供任何编译时间检查。它都是运行时的和动态的,因此这个请求是不可信的。context属性很好,或者您也可以使用获取类名。然后,你可以构建一个静态的LUT,但是整个工作可能不值得。…/P>你假设每个QTQuy控件都有一个本地C++类。例如,我可以将engine.rootObjects的第0个元素强制转换为QQuickWindow。但是我猜出来了。@perencia:有…@Tod:you,但老实说,我不知道如何将字符串转换为对象强制转换。这让我想到只使用调试器。我可以看到应用程序的所有子项,文本{}项的类型为QQuickText。不幸的是,我找不到一个可以让我进行转换的include。好的,我似乎可以从QMetaObject获得相同类型的安全性。我真的很想更好地理解这一切。我仍然想知道我将使用什么来对文本{}进行强制转换。实际上,我想知道,一般来说,如何在文档中找到Qt快速类文本与C++等价物之间的对应关系。也许它没有被记录下来,因为它开始出现,尽管我在文档中看到了这种技术,但这样做并不是正确的技术。