我有一个应用程序,我想为它制作一个小动画。 我做了一个qml文件并使用QQuickWidget打开并在我的显示器中显示它。现在我想在c ++和QML之间进行迭代。我想,例如,当调用c ++中的函数时,在我的显示中移动一个球。但我无法在c ++和qml之间建立联系。
欢迎每一位帮助。
我的代码的一小部分: C ++
QQuickWidget *quickWidget = new QQuickWidget;
quickWidget->setSource(QUrl("qrc:/QML/main.qml"));
auto rootObject = quickWidget->rootObject();
// Connect C++ signal to QML slot
connect(this, SIGNAL(cppSignal()), rootObject, SLOT(qmlSlot()));
emit cppSignal();
QML
Rectangle {
id: tela
visible: true
width: 715
height: 77
color: '#E8E8E8'
// NumberAnimation {
// running: true
// target: bolinha
// property: "x"
// duration: 1000
// to: 600
// }
function qmlSlot() {
bolinha.visible= enabled
animBolinha.start();
}
}
我能做些什么来解决它?
答案 0 :(得分:0)
我不确定你是否可以像使用C ++代码那样调用QML方法。
QT文档的推荐方法是:
所有QML方法都暴露给元对象系统。当函数暴露给元对象系统时,您可以使用QMetaObject::invokeMethod()
来调用QML函数。
可能在你的情况下,你应该如下所述打电话(未经测试)。
auto rootObject = quickWidget->rootObject();
QMetaObject::invokeMethod(rootObject, "qmlSlot");
查看documentation(搜索 调用QML方法 )
如文档中所述,您可以使用Q_ARG
传递参数,使用Q_RETURN_ARG
来接收返回参数。