首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QJSEngine的自定义C++类型:成员函数返回值始终为QVariant

QJSEngine的自定义C++类型:成员函数返回值始终为QVariant
EN

Stack Overflow用户
提问于 2013-02-26 00:59:39
回答 1查看 1.1K关注 0票数 2

在Qt5中,我有一组基于QJSEngine的C++类公开给javascript (因为Qt script似乎已被弃用)。

我的QObject派生类A和B有Q_OBJECT宏,也使用Q_DECLARE_METATYPE宏。

我公开了我的类的工厂函数,允许我从javascript内部创建新的实例。以下所有操作都可以正常工作:

代码语言:javascript
复制
a = namespace.createNewA(); // QJSEngine reports a type A object
b = namespace.createNewB(); // QJSEngine reports a type B object
b.SetParent(a); // SetParent is a slot of B taking a const A& parameter, gets called correctly
// But now.
b.GetParent(); // Reports QVariant(A), even though this is a slot: A GetParent() const

有没有办法确保javascript中的GetParent被识别为实际的类型A对象,而不是QVariant?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-26 17:39:22

我用我的原始代码解决了问题:

在一般情况下,使用带有返回值的Qt插槽的

  1. 可能不是一个好主意(例如,参见Qt: meaning of slot return value?)。我将函数更改为Q_INVOKABLE,这实际上并没有改变结果,但它似乎是一个更安全的地方,继续按值from.
  2. Returning似乎不是一个好主意的脚本/包装。通过使用调试器深入研究代码,我发现QVariant强制转换到QObject失败了,这让灯泡熄灭了: by-value可能会破坏试图查找QObject派生类型的qobject_cast。我更改了调用以返回指向QObject的指针,现在QJSEngine将该对象报告为正确的类型。

这需要对我的代码设置进行一些更改,因为返回值过去是临时的,但我可以接受。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15072226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档