QByteArray到QML中的Javascript缓冲区或可序列化类型

QByteArray到QML中的Javascript缓冲区或可序列化类型,javascript,qt,qtwebengine,Javascript,Qt,Qtwebengine,我注册了一个类,该类返回读取文件的结果,该文件的类型为QByteArray,在QML中似乎不是本机支持的文件,因此我得到一些乱码,即使是正确的数据,我也无法将其转换为blob 因此,我试图在最后得到一个Javascript类型的File或Blob,这本身就是最终目标。因此这两种javascript类型在QML中不存在 我的问题是如何创建一个bufferish类型,通过序列化Json对象传递到我的嵌入式web 注:即使是一个坏主意,我甚至尝试了QString,但在将QByteArray转换为QSt

我注册了一个类,该类返回读取文件的结果,该文件的类型为
QByteArray
,在
QML
中似乎不是本机支持的文件,因此我得到一些乱码,即使是正确的数据,我也无法将其转换为blob

因此,我试图在最后得到一个Javascript类型的
File
Blob
,这本身就是最终目标。因此这两种javascript类型在QML中不存在

我的问题是如何创建一个bufferish类型,通过序列化Json对象传递到我的嵌入式web


注:即使是一个坏主意,我甚至尝试了QString,但在将
QByteArray
转换为
QString

的过程中,我丢失了数据,因为Qt5.8已经是
ArrayBuffer

2016-03-053b7e2a69f7eb8597c807de39b4de39721e9e2bd2

< Convert QByteArray > C++类型在QML ArrayBuffer,反之亦然< Nobuaki Sukegawa,审核人:西蒙·豪斯曼


这是自Qt5.8以来的
ArrayBuffer

2016-03-053b7e2a69f7eb8597c807de39b4de39721e9e2bd2

< Convert QByteArray > C++类型在QML ArrayBuffer,反之亦然< Nobuaki Sukegawa,审核人:西蒙·豪斯曼


我所做的是将
QByteArray
QBuffer
QDataStream
的组合包装在
QObject
中,以及读取和写入基本类型、保存到磁盘或从磁盘加载的函数和一些其他辅助功能,创建非常有用的
BinaryData
类型,该类型作为
QObject
派生,可以自由传递,而不会发生任何潜在的昂贵转换


这允许在C++和QML中使用相同的方法,如果需要,可以很容易地为它编写<代码> toRayayBuffor()/Cuth>方法。< / P> < P>我为我的需要做的是将<代码> QByteArray < /C> >组合起来。

QObject
中的
QBuffer
QDataStream
,以及读写基本类型和保存到磁盘/从磁盘加载的函数和一些其他辅助功能,创建一个非常有用的
BinaryData
类型,它作为
QObject
派生,可以自由传递,没有任何潜在的昂贵的转换发生


允许在C++和QML中以相同的方式使用它,如果需要,可以很容易地编写一个<代码> ToAlayBuffER()/<代码>方法。< / P>好的,谢谢您的响应,现在我了解了QML中的映射更好一些:我可能没有正确地写标题,因为有两个步骤,有点混乱,所以我有ReadFile(C++,QByteArray)->web包装器(QML,ArrayBuffer)->web(js),我使用的是qtwebchannel,所以是发送json对象的信号,在这种情况下,由于没有转换,数据总是空的,然后由于ArrayBuffer和JSON注意(截至2017年11月7日)

QByteArray
ArrayBuffer
可以。谢谢您的回复,现在我对QML:)中的映射有了更好的理解。我可能没有正确地写标题,因为有两个步骤,有点混乱,所以我有ReadFile(C++,QByteArray)->web包装器(QML,ArrayBuffer)->web(js),我使用的是qtwebchannel,所以是发送json对象的信号,在这种情况下,由于没有转换,数据总是空的,然后由于ArrayBuffer和JSON注意(截至2017年11月7日)
QByteArray
ArrayBuffer
是。非常感谢@ddriver听起来是个不错的选择,所以我注意到了:)。它并没有解决我的问题,因为它们中没有一个可以序列化以发送到我的嵌入式web。但无论如何,我已经决定使用websocket发送数据,这样您的两个答案都是有效的:)。好奇您对“可序列化”的定义是什么?在这种情况下,我同意这可能不是最好的词。我应该说可序列化为可通过qwebchannel传递的javascript对象,在qml中将ArrayBuffer设置为js对象的属性会导致该对象为空,因此在作为json的一部分进行赋值时存在强制转换问题。您可以将其转换为重载的
YourType.prototype.toJson
中的普通数组。是的,我同意,但最后,为了提高性能,我认为通过web套接字(允许二进制数据)发送ArrayBuffer是一个更好的解决方案。我可以通过它传输我的文件,而不是通过额外的步骤将整个文件序列化到一个数组中,并通过网络通道传递。非常感谢@ddriver听起来是一个不错的选择,所以我注意到了:)。它并没有解决我的问题,因为它们中没有一个可以序列化以发送到我的嵌入式web。但无论如何,我已经决定使用websocket发送数据,这样您的两个答案都是有效的:)。好奇您对“可序列化”的定义是什么?在这种情况下,我同意这可能不是最好的词。我应该说可序列化为可通过qwebchannel传递的javascript对象,在qml中将ArrayBuffer设置为js对象的属性会导致该对象为空,因此在作为json的一部分进行赋值时存在强制转换问题。您可以将其转换为重载的
YourType.prototype.toJson
中的普通数组。是的,我同意,但最后,为了提高性能,我认为通过web套接字(允许二进制数据)发送ArrayBuffer是一个更好的解决方案。我可以通过它来流式传输我的文件,而不是通过额外的步骤将完整文件序列化到数组中,并通过网络通道传递它。