Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如果路径包含空格(在“apt get upgrade”之后),QDesktopServices::openUrl()将失败_C++_Linux_Qt_Debian - Fatal编程技术网

C++ 如果路径包含空格(在“apt get upgrade”之后),QDesktopServices::openUrl()将失败

C++ 如果路径包含空格(在“apt get upgrade”之后),QDesktopServices::openUrl()将失败,c++,linux,qt,debian,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")); 这将生成

我最近在以前工作正常的程序上看到了这个错误。我认为在我执行了
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:没有这样的文件或目录
。但是文件存在,例如,
xdg open”/home/sashoalm/Has Spaces.txt“
工作正常

有解决办法吗?这个错误是什么时候发生的?我的操作系统是Debian喘息

编辑:我检查了Qt4的源代码,相关代码如下(来自qdesktopservices_x11.cpp):


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

或者使用\

QUrl("/home/sashoalm/Has\ Spaces.txt")
或在路径中添加引号:-

QUrl("\"/home/sashoalm/Has Spaces\"")
关于Qt5

工作很好。当纯粹从第一行这样的QUrl加载文件时,我也遇到了同样的问题

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

但是当使用QUrl::fromLocalFile时,它只是做了一件事

Eh,编译器将捕获第一行中的第一个反斜杠,而在第二行中,最后一个符号是斜杠/“而不是\”,而不是反斜杠,因此它甚至不会编译。不管怎样,我测试了它们,但它们没有足够的工作。对不起,我对最后一个斜杠的错误,应该是反斜杠。我已经在这里改正了。如果将QFileInfo对象与路径一起使用,QFileInfo::exists()是否返回true?编译器的优点是,您可能需要将它们放在一起,用反斜杠转义空格,但也要用引号转义整个字符串。请参阅我的编辑,问题与此无关,建议的解决方案仍然不起作用。问题更可能发生在
xdg open
,它不处理百分比编码的URL,这就是QDesktopServices::openUrl()所做的,我查看了源代码,并发布了代码的相关部分。请记住,即使是引号也将进行百分比编码,因此它仍然会失败。另外,我还写到我已经验证了它的存在。你写到你通过直接调用xdg open来验证它的存在,这与从QDesktopServices调用它并不完全相同。如果问题出在QDesktopServices上,那么改用QProcess并调用“xdg open”怎么样?嗯,奇怪<代码>QDesktopServices::openUrl(QUrl::fromLocalFile(“d:\\a b\\c d.txt”)在Windows上运行良好。
QDesktopServices::openUrl(QUrl::fromLocalFile("/home/sashoalm/Has Spaces.txt"));
QDesktopServices::openUrl(QUrl("/home/sashoalm/Has Spaces.txt"));