Linux下的应用程序数据文件夹使用Qt QDesktopServices :: storageLocation

时间:2012-08-14 14:35:36

标签: linux qt

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

QDesktopServices::storageLocation(QDesktopServices::DataLocation)

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

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

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

3 个答案:

答案 0 :(得分:3)

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

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

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

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

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

QString s = QDesktopServices::storageLocation(QDesktopServices::DataLocation);
s.chop(1);