在 Qt for Web Assembly 上访问本地用户文件

Access local user file on Qt for Web Assembly

我想在 Qt for Web assembly 上访问我的软件中的本地文件(读取二进制文件)。

似乎已经有一个函数可以做到这一点:QFileDialog::getOpenFileContent。但是我找不到任何相关的例子来说明如何使用这个功能。如果有人帮助我如何使用此功能,我将不胜感激。

谢谢。

我现在没有可用的 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();

由于 Qt WebAssembly 在同一个 javascript 沙箱中运行,它无法轻松访问本地文件系统,这就是为什么我们想出了一种访问方式,即 getOpenFileContent。

您可以使用 getOpenFileContent 使用的私有 API,它位于 src/gui/platform/wasm/qwasmlocalfileaccess_p.h 中,参见 790cf25f9d811f2cda7e252b4f1844e8fce27e2a

这两个都会打开一个文件对话框。

您也可以先使用 Emscripten 的文件系统 API 自己将文件同步到沙箱,然后您就可以像在应用程序本地一样访问它。 https://emscripten.org/docs/api_reference/Filesystem-API.html