QQuickWidget在QML

时间:2017-09-18 22:41:56

标签: c++ qt

我有一个应用程序,我想为它制作一个小动画。 我做了一个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();
    }
}

enter image description here

我能做些什么来解决它?

1 个答案:

答案 0 :(得分:0)

我不确定你是否可以像使用C ++代码那样调用QML方法。

QT文档的推荐方法是:

所有QML方法都暴露给元对象系统。当函数暴露给元对象系统时,您可以使用QMetaObject::invokeMethod()来调用QML函数。

可能在你的情况下,你应该如下所述打电话(未经测试)。

auto rootObject = quickWidget->rootObject();
QMetaObject::invokeMethod(rootObject, "qmlSlot");

查看documentation(搜索 调用QML方法

如文档中所述,您可以使用Q_ARG传递参数,使用Q_RETURN_ARG来接收返回参数。