Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
定制C++;QJSEngine的类型:成员函数返回值始终为QVariant 我有一个C++类,在Qt 5中,基于QJSGEngress(因为Qt脚本似乎被弃用)而暴露给JavaScript。_Javascript_Qt5_Qjsengine - Fatal编程技术网

定制C++;QJSEngine的类型:成员函数返回值始终为QVariant 我有一个C++类,在Qt 5中,基于QJSGEngress(因为Qt脚本似乎被弃用)而暴露给JavaScript。

定制C++;QJSEngine的类型:成员函数返回值始终为QVariant 我有一个C++类,在Qt 5中,基于QJSGEngress(因为Qt脚本似乎被弃用)而暴露给JavaScript。,javascript,qt5,qjsengine,Javascript,Qt5,Qjsengine,我的QObject派生类A和B有Q_对象宏,也使用Q_DECLARE_元类型宏 我已经为我的类公开了工厂函数,这些函数允许我从javascript内部创建新实例。以下各项均适用: a = namespace.createNewA(); // QJSEngine reports a type A object b = namespace.createNewB(); // QJSEngine reports a type B object b.SetParent(a); // SetParent i

我的QObject派生类A和B有Q_对象宏,也使用Q_DECLARE_元类型宏

我已经为我的类公开了工厂函数,这些函数允许我从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

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

  • 在一般情况下,使用带有返回值的Qt插槽可能不是一个好主意(参见示例)。我将函数改为Q_INVOKABLE,这实际上并没有改变结果,但它似乎是一个更安全的地方
  • 按值返回对于脚本编写/包装来说似乎也不是一个好主意。通过使用调试器深入研究代码,我发现QVariant转换到qobject失败,这导致灯泡熄灭:by value可能会中断尝试查找qobject派生类型的qobject_转换。我更改了调用以返回指向QObject的指针,现在QJSEngine将该对象报告为正确的类型

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

    有没有机会与大家分享如何使用QJSEngine创建“可更新”对象?我现在正在努力解决这个问题。我找到的所有文档都描述了如何使用旧引擎