虽然JavaScript确实提供了一系列类型数组来有效存储各种宽度整数和实数,但在QML实现中似乎没有这些数组:
var array = new Uint8Array // error: Expected token `}
我需要{+ 1}} C ++和JS之间的互操作,并不像使QByteArray
成为元类型那么简单,因此它可以在QML中用作参数 - 我需要持久的硬拷贝生活在JS中的数据,虽然我不会修改JS中的数据,只会在暴露的C ++ API中使用。
我目前有一个基于转换和使用QByteArray
和Latin1转换的解决方案,即使它似乎通过简单的单元测试,它感觉脆弱和不安全,所以我想知道是否还有更多优雅清洁的解决方案?此外,它有点低效,因为它将为存储在其中的每个字节使用两个字节。
事实证明:
此代码段确认它已存在且正在运行:
QString
但问题的重要部分仍然没有答案 - 如何(有效地)在 var array = new Uint8Array(1)
array[0] = 257
console.log(array[0]) // outputs 1, the expected overflow value
和QByteArray
之间互动。这里的关键是效率,因为我有很多这样的互操作,并且我讨厌通过一次从C ++调用JS函数来填充Uint8Array
时使用笨拙的东西。
答案 0 :(得分:1)
var
关键字之前有一个zero-width space。我无法在Qt Creator中看到这一点,即使使用" Visualize whitespace"已启用,但vi
显示了该信息:
<200b>var array = new Uint8Array
他说这经常是生成的;也许是有错误的编辑。
QML解析器应该选择它;见QTBUG-51881。