Qquickwidget在QML中从C 发送信号

QQuickWidget send signal from c++ to slot in QML

本文关键字:信号 中从 QML Qquickwidget      更新时间:2023-10-16

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

在此处输入图像描述

我可以做什么来解决它?

我不确定是否可以像您一样从C 代码调用QML方法。

QT文档的推荐方法是:

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

大概在您的情况下,您应该按照下面说(未测试)。

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

Look Documentation(搜索调用QML方法

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