QByteArray在QML中转换成什么?

Tim*_*mmm 6 javascript qt qml qbytearray

如果我有

signal:
    void foo(QByteArray data);
Run Code Online (Sandbox Code Playgroud)

在QML中我处理它:

 onFoo: {
     console.log(data.toString());
 }
Run Code Online (Sandbox Code Playgroud)

QML中的数据类型是什么?它有什么方法?它似乎不是一个javascript字符串 - 它甚至没有.length,而且没有.charCodeAt().但它似乎也不是QByteArray- 不.at().data[0]undefined!它确实.toString().

我如何访问其内容?例如,如果它是一个四字节uint32_t,我如何将该数字转换为javascript变量?

Nej*_*jat 7

正如指出这里

QML 引擎提供 QByteArray 值和 JavaScript ArrayBuffer 对象之间的自动类型转换。

此功能自 Qt 5.8 起可用。


pep*_*ppe 4

根据http://doc.qt.io/qt-5/qtqml-cppintegration-data.html和当前源http://code.woboq.org/qt5/qtdeclarative/src/qml/compiler/qmltypecompiler.cpp .html#567,QByteArray 到 QML 之间没有转换。您可能会在 JS 中得到一个不透明的、无法访问的对象。

编辑:上述情况在 Qt 5.8 之前都是正确的。5.8 添加了 QByteArray 和 JS Array 之间的转换,请参见其他答案。

不用说:在撰写本文时,您想要使用的唯一版本是 >= 5.12。

  • 还请在 bugtracker 中添加建议以添加 QByteArray 的映射。它可以得到某种 JS 数组的支持。 (2认同)