QByteArray 在 QML 中被转换成什么?

What does QByteArray get converted to in QML?

如果我有

signal:
    void foo(QByteArray data);

我在 QML 中处理它:

 onFoo: {
     console.log(data.toString());
 }

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

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

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

编辑:以上内容适用于 Qt 5.8。 5.8 增加了QByteArray 和JS Array 之间的转换,见另一个答案。

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

here所述:

The QML engine provides automatic type conversion between QByteArray values and JavaScript ArrayBuffer objects.

此功能自 Qt 5.8 起可用。