2

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

4

2 回答 2

3

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

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

或早期版本中的这个:

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

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

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

QString QStandardPaths::​writableLocation(StandardLocation 类型)

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

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

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

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 上不受支持:

ApplicationsLocation 不支持(目录不可读)

如果您想跨应用程序共享图像,则需要对上面的代码稍作调整来使用它。虽然我认为你想要上面的那个,但有点不清楚你想要哪一个,所以我提到了两个:

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

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

于 2014-12-07T07:57:22.097 回答
1

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

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

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

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

于 2014-12-07T07:08:00.610 回答