【问题标题】:What does QByteArray get converted to in QML?QByteArray 在 QML 中被转换成什么?
【发布时间】:2015-08-20 11:46:53
【问题描述】:

如果我有一个

signal:
    void foo(QByteArray data);

我在 QML 中处理它:

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

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

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

【问题讨论】:

  • 在将 QByteArray 转换为 ArrayBuffer 方面似乎有了一些进展。由于它在几天前被合并,我们可能不得不等到 Qt 5.8。 codereview.qt-project.org/#/c/144761

标签: javascript qt qml qbytearray


【解决方案1】:

根据http://doc.qt.io/qt-5/qtqml-cppintegration-data.html 和当前来源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。

【讨论】:

  • 好吧,我想我必须创建自己的基于 QObject 的类型来包装 QByteArray。
  • 请在 bugtracker 中添加一个建议以添加 QByteArray 的映射。它可以得到某种 JS 数组的支持。
  • 是的,它已经过时了。改变它。
【解决方案2】:

here 中所述:

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

此功能从 Qt 5.8 开始可用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-14
    • 2016-08-14
    • 2019-11-11
    • 2016-11-04
    • 2020-09-18
    • 2012-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多