【发布时间】:2016-03-29 12:22:11
【问题描述】:
我有一个带有Rectangle 的qml 文件。我想从 C++ 后端触发onClicked( )。
那么,如何在 C++/Qt 后端访问 QML 组件引用?
【问题讨论】:
标签: qt qml qt5 qqmlcomponent qqmlapplicationengine
我有一个带有Rectangle 的qml 文件。我想从 C++ 后端触发onClicked( )。
那么,如何在 C++/Qt 后端访问 QML 组件引用?
【问题讨论】:
标签: qt qml qt5 qqmlcomponent qqmlapplicationengine
您应该使用QObject::findChild() 来定位对象,并像调用名义方法一样简单地调用信号。
但是有一个问题,因为QQuickRectangle 本身是一个私有类,所以它不能直接在 C++ API 中使用。此外,它实际上没有clicked() 信号,除非您自己实现了一个。如果你这样做了,它就不会成为 C++ 接口的一部分。
另外,没有onClicked()信号,信号是clicked(),onClicked:是handler hook。
但是,您仍然可以使用 Qt 元系统发出它,只需使用:
QObject * object = engine.rootObjects().at(0)->findChild<QObject *>("yourObjectName");
if (object) QMetaObject::invokeMethod(object, "clicked");
即使信号是在 QML 端实现的,它也可以工作,即使没有转换为具体的 C++ 类型也可以工作。
现在,如果您的对象不直接位于根对象树中,您将无法找到它,并且别无选择,只能将对它的引用从 QML 端传递给 C++ 插槽或可调用函数。
【讨论】:
onSignalName - 这只是为建立声明性连接提供的帮助,它不能被调用。