C++ QML中的类型化数组?QByteArray到JS UINT8阵列来回互操作

C++ QML中的类型化数组?QByteArray到JS UINT8阵列来回互操作,c++,qt,interop,qml,bytearray,C++,Qt,Interop,Qml,Bytearray,尽管JavaScript似乎确实提供了一系列类型数组来有效地存储各种宽度的整数和实数,但在QML实现中似乎没有这些类型数组: ​var array = new Uint8Array // error: Expected token `} 我需要在C++和JS之间编写< QByteArray > /COD>互操作,它并不像制作 QByteArray < /Cype >那样是一个元模型,所以它可以作为参数使用在QML——我需要持久的硬拷贝数据,它存在于JS中,虽然我不会修改JS中的数据,只会在暴

尽管JavaScript似乎确实提供了一系列类型数组来有效地存储各种宽度的整数和实数,但在QML实现中似乎没有这些类型数组:

​var array = new Uint8Array // error: Expected token `}

我需要在C++和JS之间编写< <代码> QByteArray > /COD>互操作,它并不像制作<代码> QByteArray < /Cype >那样是一个元模型,所以它可以作为参数使用在QML——我需要持久的硬拷贝数据,它存在于JS中,虽然我不会修改JS中的数据,只会在暴露的C++ API中使用。 我目前有一个基于转换的解决方案,它使用

QString
和拉丁语转换,尽管它看起来通过了简单的单元测试,但它感觉脆弱和不安全,所以我想知道是否有一个更优雅、更干净的解决方案?而且,它的效率有点低,因为存储在其中的每个字节将使用两个字节

结果证明:

  • 正如米奇所指出的,有一个“幽灵”角色把代码搞乱了
  • Creator的autocomplete没有检测到Uint8Array,这加强了我对它不存在的怀疑
此代码段确认它已存在并正在工作:

  var array = new Uint8Array(1)
  array[0] = 257
  console.log(array[0]) // outputs 1, the expected overflow value

但是问题的重要部分仍然没有得到回答-如何(有效地)在
QByteArray
Uint8Array
之间进行互操作。这里的关键是效率,因为我有很多互操作,我不喜欢用笨拙的方法来填充<代码> UTI8ARDUCT[/COD]。每次调用C++的一个元素,就可以了。类型化数组。我不得不问一个朋友为什么那个代码不起作用。他指出,在
var
关键字之前有一个。我在Qt Creator中看不到这一点,即使启用了“可视化空白”,但
vi
显示了这一点:

<200b>var array = new Uint8Array
var数组=新的Uint8Array
他说,这是经常产生的;也许是有马车的编辑


不过,QML解析器应该会注意到这一点;请参阅。

您使用的是哪个Qt版本?说它增加了对类型化数组的支持,但不幸的是,我找不到任何关于它的文档。@Mitch我使用的是最新发布的版本-5.5.1,但类型化数组肯定不存在。如果除了提到新功能外,他们还发布了文档和示例的链接,那就太好了,但是我想这太过分了:)我不认为文档是必要的,因为它实现了一个JavaScript功能。@Mitch-不是特别针对类型化数组,但对于前面的功能,一个示例或至少一个链接就很好了。因为它知道一些新的东西,所以最好知道如何使用它,而不是在文档中漫游以希望找到它。LOL,这就是从M$:)复制代码片段时发生的情况。无论如何,键入的数组似乎在那里,即使它们没有被自动完成检测到,因为我得到了一个从256溢出到0的结果,但是,有效答案将构成
QByteArray
Uint8Array
interop部分;)对不起,我不能回答那部分。认为这是一个部分的答案,太大了以至于无法评论。因为缺少语法突出显示。零宽度空间??哈哈,我错过了“新功能”部分中这么好的新功能。哦,好吧,迟做总比不做强我的
QMetaType::QByteArray
在哪里([是的,这条评论毫无用处,真丢脸,但狗屎真的发生了]@BaCaRoZzo auto conversion会很好,唉,即使我今天发布了一个功能请求,它也不可能在Qt 6之前实现:)