我的应用程序基于QML
我使用Camera
并CameraCapture
从相机捕获图像。捕获后,我想将捕获的图像存储在应用程序数据文件夹中CameraCapture.captureToLocation()
。但我不知道如何获取该文件夹的路径。所以我的问题-如何获得具有写入权限的应用程序文件夹的路径?Qt有没有办法得到它?我猜它应该是系统指定的文件夹。例如在 Android 中它应该是 /data/data/AppName。正如我所见,LocalStorage 在某个类似的地方创建它的文件。
2 回答
/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,因为该部分没有永久链接。您也可以检查自己,哪个最适合。
您可以使用QStandardPaths
指定可写位置:
QString path = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) ;
这里QStandardPaths::GenericDataLocation
返回一个目录位置,可以存储跨应用程序共享的持久数据,并且它永远不会为空。
它也是可能的使用QStandardPaths::ApplicationsLocation
或许多其他可以在这里找到的。您可以在 C++ 端实现一个函数并在 QML 中使用它来获取标准位置。