在 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++ 槽或可调用函数.
我有一个 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++ 槽或可调用函数.