如果路径包含空格,则QDesktopServices :: openUrl()会失败(" apt-get upgrade")

时间:2014-11-21 12:43:29

标签: c++ linux qt debian

我最近在曾经工作正常的程序中看到了这个错误。我认为错误在我执行了sudo apt-get upgrade之后就开始出现了,这可能已经升级了我机器上的Qt库。

我为包含此代码的新创建项目重现了此错误:

QDesktopServices::openUrl(QUrl("/home/sashoalm/Has Spaces.txt"));
QDesktopServices::openUrl(QUrl::fromLocalFile("/home/sashoalm/Has Spaces.txt"));

这会产生两个相同的消息框 - /home/sashoalm/Has%20Spaces.txt: No such file or directory。但该文件存在 - 我已经验证过,xdg-open "/home/sashoalm/Has Spaces.txt"可以正常工作,例如。

有任何变通方法吗?这个bug何时发生?我的操作系统是Debian Wheezy。

编辑:我查了Qt4的源代码,相关的代码就是这个(来自qdesktopservices_x11.cpp):

return (QProcess::startDetached(client + QLatin1Char(' ') + QString::fromLatin1(url.toEncoded().constData())));

QUrl :: toEncoded()将百分比编码的路径返回为file:///home/sashoalm/Has%20Spaces.txt。奇怪的是,自2011年之前更新版权声明后,该文件没有任何变化。所以它不能改变Qt。但是QDesktopServices :: openUrl()发出的命令是xdg-open file:///home/sashoalm/Has%20Spaces.txt,这在我的计算机上不起作用。也许它以前曾经工作过,而xdg-open本身的更新打破了它?有没有人知道xdg-open是否应该使用百分比编码处理file:///

2 个答案:

答案 0 :(得分:2)

用\

逃避空间
QUrl("/home/sashoalm/Has\ Spaces.txt")

或在路径中添加引号: -

QUrl("\"/home/sashoalm/Has Spaces\"")

答案 1 :(得分:2)

在Qt5上

QDesktopServices::openUrl(QUrl::fromLocalFile("/home/sashoalm/Has Spaces.txt"));

工作得很好。从纯粹从第一行的QUrl

加载文件时,我遇到了同样的问题
QDesktopServices::openUrl(QUrl("/home/sashoalm/Has Spaces.txt"));

但是当使用QUrl :: fromLocalFile时它只是做了事情