在 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
我想在 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