Доступ к локальному пользовательскому файлу в Qt для веб-сборки - PullRequest
0 голосов
/ 04 июля 2019

Я хочу получить доступ к локальным файлам (чтение двоичного файла) в моем программном обеспечении на Qt для веб-сборки.

Кажется, уже есть функция для этого: QFileDialog :: getOpenFileContent.Но я не могу найти связанный пример, чтобы показать, как использовать эту функцию.Я буду признателен, если кто-нибудь поможет мне, как использовать эту функцию.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 06 июля 2019

Поскольку Qt WebAssembly работает в той же изолированной программной среде javascript, он не имеет простого доступа к локальной файловой системе, поэтому мы придумали способ получить доступ - getOpenFileContent.

Возможно, вы можете использовать частный API, который используется getOpenFileContent, который находится в src / gui / platform / wasm / qwasmlocalfileaccess_p.h См. 790cf25f9d811f2cda7e252b4f1844e8fce27e2a

Оба из них откроют диалоговое окно файла.

Вы также можете самостоятельно синхронизировать файл с песочницей с помощью API файловой системы Emscripten, а затем вы сможете получить к нему доступ, как если бы он был локальным для приложения. https://emscripten.org/docs/api_reference/Filesystem-API.html

1 голос
/ 04 июля 2019

У меня сейчас нет Qt 5.13, но этот метод должен работать примерно так:

QFileDialog::getOpenFileContent(tr("Image Files (*.png *.jpg *.bmp)", [](const QString &fileName, const QByteArray &data){
    // use data
});

Более прямой путь для достижения этой цели был бы следующим:

QString fileName = QFileDialog::getOpenFileName(this,
    tr("Open Image"), "/home/jana", tr("Image Files (*.png *.jpg *.bmp)"));

QFile file(fileName);

if (!file.open(QIODevice::ReadOnly))
{
    // handle file could not be opened...
    return;
}

QByteArray blob = file.readAll();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...