在 C++ 后端访问 QML 组件

To access QML component in C++ backend

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

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

但是有一个问题,因为 QQuickRectangle 本身是私有的 class,所以不能直接在 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++ 槽或可调用函数.