2

我正在尝试使用 Qt 的 storageLocation 函数获取 Linux 下的应用程序数据文件夹位置:

QDesktopServices::storageLocation(QDesktopServices::DataLocation)

但是这个函数返回路径末尾有两个斜杠:

 /home/user/.local/share/data//

路径尽头的两个斜线对我来说看起来很奇怪。这是正常的吗?或者这是Qt中的错误?我的 Linux 是 Ubuntu。Qt 版本是 4.8.1。

4

3 回答 3

3

这是 Qt 中的一个错误(请参阅错误报告)。但是,只有在您没有设置应用名称和组织名称时才会发生这种情况。您应该使用QApplication::setApplicationName和设置它们QApplication::setOrganizationName

chop您之前接受的解决方案很糟糕,原因有两个。首先,如果修复了这个错误,您的代码可能会被破坏。谁知道在下一个版本中会有多少斜线(可能是 0)。我建议使用以下内容删除双斜杠:

QString s = QDesktopServices::storageLocation(QDesktopServices::DataLocation);
s = QDir(s).absolutePath();

但更重要的是该/home/user/.local/share/data/位置仍然无效。如果您想获得正确的位置,您需要设置应用程序和组织名称。简单地删除尾部斜杠并不能解决任何问题,它只是一个肮脏的黑客。

于 2013-06-14T09:53:25.773 回答
1

我知道这是一个老问题,但QDesktopService::dataLocation有以下结构<user data location>/<application name>/

在 linux 下,用户数据的位置是$HOME/.local/share/data/.

应用程序名称是通过QCoreApplication::setApplicationName()方法设置的,我猜你没有设置它,这就解释了为什么你有两个斜杠。

于 2013-06-14T09:35:39.897 回答
0

不,不仅你在这里也一样。你只需要砍掉最后一个字符

QString s = QDesktopServices::storageLocation(QDesktopServices::DataLocation);
s.chop(1); 
于 2012-08-14T15:48:44.977 回答