在C ++后端访问QML组件

时间:2016-03-29 12:22:11

标签: qt qml qt5 qqmlcomponent qqmlapplicationengine

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

1 个答案:

答案 0 :(得分: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 ++槽或可调用函数之外别无选择。 / p>