QByteArray в буфер Javascript или сериализуемый тип в QML

Я зарегистрировал класс, который возвращает результат чтения файла типа QByteArray, который, по-видимому, не является исходно поддерживаемым файлом в QML, поэтому я получаю некоторую тарабарщину, даже если это правильные данные, я не могу преобразовать их в капля

Итак, я пытаюсь получить в конце тип Javascript File или Blob, который сам по себе является конечной целью. Таким образом, эти 2 типа javascript не существуют в QML.

Мой вопрос заключается в том, как я могу создать буферный тип, который проходит через сериализованный объект Json в мою встроенную сеть.

PS. даже будучи плохой идеей, я даже попробовал QString, но я потерял данные при преобразовании QByteArray в QString


person Kanekotic    schedule 24.02.2017    source источник


Ответы (2)


Это ArrayBuffer начиная с Qt 5.8.

2016-03-05 3b7e2a69f7eb8597c807de39b4de39721e9e2bd2

Преобразование QByteArray в типе C++ в ArrayBuffer в QML и наоборот

Нобуаки Сукегава, Рецензент: Саймон Хаусманн.

SO упоминает

Упоминания, связанные с Qt tracker

person Velkan    schedule 24.02.2017
comment
хорошо, спасибо за ваш ответ, теперь я немного лучше понимаю отображение в QML :). Возможно, я не правильно написал заголовок, и поскольку существует двухэтапный процесс, это немного сбивает с толку, поэтому у меня есть ReadFile (C++, QByteArray) -> оболочка сети (QML, ArrayBuffer) -> сеть (js, ?? ?), я использую qtwebchannel, поэтому это сигнал, который отправляет объект json, и в этом случае данные всегда пусты из-за отсутствия преобразования, а затем из-за ArrayBuffer и json - person Kanekotic; 24.02.2017
comment
Обратите внимание, что (по состоянию на 7 ноября 2017 г.) QByteArrayArrayBuffer в настоящее время не задокументировано. - person Phrogz; 08.11.2017

Что я сделал для своих нужд, так это обернул комбинацию QByteArray, QBuffer и QDataStream в QObject вместе с функциями для чтения и записи примитивных типов и сохранения на/загрузки с диска и некоторых других вспомогательных функций, чтобы создать то, что оказалось очень полезный тип BinaryData, который как производный от QObject можно свободно передавать без каких-либо потенциально дорогостоящих преобразований.

Это позволяет использовать его одинаково как в C++, так и в QML, при необходимости вы можете легко создать для него метод toArrayBuffer().

person dtech    schedule 24.02.2017
comment
большое спасибо @ddriver звучит как хороший вариант, так что я принимаю это к сведению :). он не завершает решение моей проблемы, поскольку ни один из них не может быть сериализован для отправки в мою встроенную сеть. но в любом случае я решил использовать веб-сокет для отправки этих данных, поэтому оба ваших ответа действительны :). - person Kanekotic; 25.02.2017
comment
Любопытно, каково ваше определение сериализуемого? - person dtech; 25.02.2017
comment
в этом случае я согласен, наверное, не самое лучшее слово. я должен сказать, что сериализуемый объект javascript, который может быть передан через qwebchannel, установка ArrayBuffer в свойство объекта js в qml приводит к тому, что он становится пустым, поэтому возникает проблема приведения при назначении как часть json. - person Kanekotic; 25.02.2017
comment
Вы можете преобразовать его в простой массив в перегруженном YourType.prototype.toJson. - person dtech; 25.02.2017
comment
да, я согласен, но, наконец, для производительности я думаю, что это лучшее решение для отправки ArrayBuffer через веб-сокет (разрешает двоичные данные), я могу передавать через него свой файл, чем иметь дополнительный шаг для сериализации полного файла в массив, и передать его через веб-канал. - person Kanekotic; 25.02.2017