QML中的类型化数组? QByteArray来自JS Uint8Array来回互通

时间:2016-03-14 21:32:03

标签: c++ qt interop qml bytearray

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

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

我需要{+ 1}} C ++和JS之间的互操作,并不像使QByteArray成为元类型那么简单,因此它可以在QML中用作参数 - 我需要持久的硬拷贝生活在JS中的数据,虽然我不会修改JS中的数据,只会在暴露的C ++ API中使用。

我目前有一个基于转换和使用QByteArray和Latin1转换的解决方案,即使它似乎通过简单的单元测试,它感觉脆弱和不安全,所以我想知道是否还有更多优雅清洁的解决方案?此外,它有点低效,因为它将为存储在其中的每个字节使用两个字节。

事实证明:

  • 正如米奇指出的那样,有一个"幽灵"弄乱代码的字符
  • 创作者的自动填充功能无法检测到Uint8Array,这加强了我对它不存在的怀疑

此代码段确认它已存在且正在运行:

QString

但问题的重要部分仍然没有答案 - 如何(有效地)在 var array = new Uint8Array(1) array[0] = 257 console.log(array[0]) // outputs 1, the expected overflow value QByteArray之间互动。这里的关键是效率,因为我有很多这样的互操作,并且我讨厌通过一次从C ++调用JS函数来填充Uint8Array时使用笨拙的东西。

1 个答案:

答案 0 :(得分:1)

嘿,这很奇怪。键入的数组are indeed supported in Qt 5.5。我不得不问朋友为什么那段代码不起作用。他指出您在var关键字之前有一个zero-width space。我无法在Qt Creator中看到这一点,即使使用" Visualize whitespace"已启用,但vi显示了该信息:

<200b>var array = new Uint8Array

他说这经常是生成的;也许是有错误的编辑。

QML解析器应该选择它;见QTBUG-51881