我最近在曾经工作正常的程序中看到了这个错误。我认为错误在我执行了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:///
?
答案 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时它只是做了事情