gpt4 book ai didi

c++ - QQuickWidget 将信号从 C++ 发送到 QML 中的插槽

转载 作者:太空宇宙 更新时间:2023-11-04 12:56:35 27 4
gpt4 key购买 nike

我有一个应用程序,我想为它制作一个小动画。我做了一个 qml 文件并使用 QQuickWidget 打开并在我的显示器中显示它。现在我想在 C++ 和 QML 之间进行迭代。例如,当调用 c++ 中的函数时,我想要在我的显示器中移动一个球。但我无法在 c++ 和 qml 之间建立联系。

欢迎任何帮助。

我的代码的一小部分:语言

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

我能做些什么来解决它?

最佳答案

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

QT 文档推荐的方法是:

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

可能在您的情况下,您应该按如下所述调用(未测试)。

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

documentation (搜索Invoking QML Methods)

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

关于c++ - QQuickWidget 将信号从 C++ 发送到 QML 中的插槽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46289166/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com