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 起可用。
如果我有
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 起可用。