QML 数据文件夹

QML data folder

本文关键字:文件夹 数据 QML      更新时间:2023-10-16

我的应用程序基于我使用CameraCameraCapture从相机捕获图像QML。捕获后,我想将捕获的图像存储在带有CameraCapture.captureToLocation()的应用程序数据文件夹中。但是我不知道如何获取此文件夹的路径。所以我的问题 - 如何获取具有写入权限的应用程序文件夹的路径?Qt有办法得到它吗?我猜它应该是系统指定的文件夹。例如,在Android中,它应该是/data/data/AppName。正如我所看到的,LocalStorage在类似的地方创建其文件。

/data/data/AppName没有在QStandardPaths中映射,但我认为最好使用这个:

QStandardPaths::AppDataLocation 17 返回可以存储持久性应用程序数据的目录位置。这是一个特定于应用程序的目录。要获取存储要与其他应用程序共享的数据的路径,请使用 QStandardPaths::GenericDataLocation。返回的路径永远不会为空。在 Windows 操作系统上,这将返回漫游路径。此枚举值是在 Qt 5.4 中添加的。

或者在早期版本中的这个:

QStandardPaths::D ataLocation 9 返回与 AppLocalDataLocation 相同的值。此枚举值已弃用。最好使用 AppDataLocation,因为在 Windows 上,建议使用漫游路径。

这些将在Android上设置为DataLocation "<APPROOT>/files", "<USER>/<APPNAME>/files"下面。

但请注意,从 5.4 开始,后者已弃用,如文档所示。然后您可以按如下方式设置它:

QString QStandardPaths::writableLocation(StandardLocation type(

返回

应将文件类型写入到的目录,如果无法确定位置,则返回空字符串。

注意:返回的存储位置可以是不存在的目录;即,它可能需要由系统或用户创建。

所以,你会写这样的东西:

QString dataPath = QStandardPaths::​writableLocation(QStandardPaths::AppDataLocation);
// Do not need to check against empty string for this value as per documentatio
CameraCapture.captureToLocation(dataPath);

注意:请不要将QStandardPaths::ApplicationsLocation用于此目的,因为这是非专用位置。此外,它在Android上甚至不受支持:

应用程序位置不受支持(目录不可读(

如果要在应用程序之间共享映像,则需要对上面的代码进行细微调整。虽然我认为你想要上面的那个,但有点不清楚你想要哪一个,所以我同时提到:

StandardPaths::GenericDataLocation 11 返回可以存储跨应用程序共享的持久数据的目录位置。这是一个通用值。返回的路径永远不会为空。

这设置为在安卓上GenericDataLocation "<USER>"。类文档中提到了确切的映射,您只需向下滚动到表即可。我无法提供直接URL,因为该部分没有永久链接。你也可以检查自己,哪个最适合。

您可以使用QStandardPaths指定可写位置:

QString path = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) ;

在这里,QStandardPaths::GenericDataLocation返回一个目录位置,在该位置可以存储跨应用程序共享的持久数据,并且它永远不会为空。

也可以使用QStandardPaths::ApplicationsLocation或许多其他可以在这里找到的东西。您可以在C++端实现一个函数,并在 QML 中使用它来获取标准位置。