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

标签 c++ qt qtquick2 qobject qtquickcontrols

我的问题最好用一个例子来说明。我有带有 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/

相关文章:

c++ - 将 Eigen::MatrixXd 矩阵转换为 cgal 容器类型

c++ - C++ 代码崩溃

zooming - 在Qt Quick(QML)中实现缩放/缩放的正确方法

string - 从字符串创建 QML 组件

qt - 升级到 qt 5.5.0 后,我收到了 QML 导入的警告

C++程序——输入文本流

c++ - MFC C++ 中的对话框

c++ - QRegularExpression 是否删除了反向引用(因此搜索速度更快)

c++ - 如何在 Windows 上使用 Qt Creator 导出并链接到 dll?

qt - 从 QML 中的坐标获取纬度和经度