0

我有一个 qml 文件Rectangle。我想触发onClicked( )from C++ 后端。那么,如何在 C++/Qt 后端访问 QML 组件引用?

4

1 回答 1

1

您应该使用QObject::findChild()来定位对象,并像调用标称方法一样简单地调用信号。

但是有一个问题,因为QQuickRectangle它本身是一个私有类,所以它不能直接在 C++ API 中使用。此外,它并没有真正的clicked()信号,除非你自己实现了一个。如果你这样做了,它就不会成为 C++ 接口的一部分。

此外,没有onClicked()信号,信号是clicked()并且onClicked:是处理程序挂钩。

但是,您仍然可以使用 Qt 元系统发出它,只需使用:

QObject * object = engine.rootObjects().at(0)->findChild<QObject *>("yourObjectName");
if (object) QMetaObject::invokeMethod(object, "clicked");

即使信号是在 QML 端实现的,它也能工作,即使没有转换为具体的 C++ 类型,它也能工作。

现在,如果您的对象不直接位于根对象树中,您将无法找到它,并且别无选择,只能将对它的引用从 QML 端传递给 C++ 插槽或可调用函数。

于 2016-03-29T12:32:33.797 回答