我正在尝试使用Qt的storageLocation函数在Linux下获取应用程序数据文件夹位置:
QDesktopServices::storageLocation(QDesktopServices::DataLocation)
但是这个函数返回末尾有两个斜杠的路径:
/home/user/.local/share/data//
路径尽头的两条斜线对我来说很奇怪。这是正常的吗?或者这是Qt中的错误? 我的Linux是Ubuntu。 Qt版本是4.8.1。
答案 0 :(得分:3)
这是Qt中的一个错误(请参阅bug report)。但是,只有在未设置应用程序的名称和组织名称时才会发生这种情况。您应该使用QApplication::setApplicationName
和QApplication::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);