发送JavaScript Object QML信号参数



我正在尝试将QML信号连接到具有以下参数类型的Qt插槽:

QML侧:

signal Sig(var info)

在Qt侧:

QObject::connect(topLevel, SIGNAL(Sig(QVariantMap)), &mObj, SLOT(mSlot(QVariantMap)));

这给了我以下信息:

QObject::connect: No such signal QQuickWindowQmlImpl_QML_24::Sig(QVariantMap) in ...

因此,我假设类型varQVariantMap不匹配。根据本文档,QVariantMap类型被转换为JavaScript对象。但我不确定它是否也会反过来。

我实现了一种相反类型的连接(使用QVariantMap的Qt信号,使用"Connections"元素的QML处理程序(,效果很好。我能够将信号的参数作为JS对象获取。

顺便说一句,我在代码中也尝试了与string参数类型相同的连接,所以我不认为我的代码中有另一个无关的错误。

如何使用信号/插槽机制将JS对象传递到Qt(C++(端?我一直没能找到解决办法。实际上,甚至没有一个例子与我的情况(信号和插槽参数类型(相匹配。这让我觉得我在犯某种设计错误。

参数是C++侧的QVariants,因此需要进行

QObject::connect(topLevel, SIGNAL(Sig(QVariant)), &mObj, SLOT(mSlot(QVariant)));

请注意,您还需要更改mSlot参数类型,因为QVariant不能隐式转换为QVariantMap。要在插槽中获取映射,请使用QVariant::toMap()方法,如果它确实是映射(如果不是,则此方法返回空映射,并且需要进行一些调试(。

它的工作方式正好相反,因为QVariantMap可以隐式转换为QVariant

最新更新