2014-11-21 42 views
2

我最近在程序中看到了這個錯誤,它曾經很好地工作。我認爲這個錯誤在我做了一個sudo apt-get upgrade後開始出現,它可能已經升級了我機器上的Qt庫。如果路徑包含空格(在「apt-get upgrade」之後),QDesktopServices :: openUrl()將會失敗

我轉載此錯誤包含此代碼新建項目:

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

這將產生2個的消息框說是相同的 - /home/sashoalm/Has%20Spaces.txt: No such file or directory。但該文件存在 - 例如,我已驗證,xdg-open "/home/sashoalm/Has Spaces.txt"正常工作。

任何解決方法?這種錯誤何時發生?我的操作系統是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

嗯,奇怪。 'QDesktopServices :: openUrl(QUrl :: fromLocalFile(「d:\\ a b \\ c d.txt」));'在Windows上工作得很好。 – vahancho 2014-11-21 14:45:18

回答

2

要麼使用\

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

空間或添加引號的路徑: -

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

Eh,第一行中的第一個反斜槓會被編譯器捕獲,而第二行中的最後一個符號是斜槓/「而不是\」,而不是反斜槓,所以它甚至不會編譯。無論如何,我都測試過它們,但它們確實不夠用。 – sashoalm 2014-11-21 13:55:03

+0

對不起,我對最後一個斜槓的錯誤,應該是反斜槓。我在這裏糾正了它。如果你在路徑中使用QFileInfo對象,QfileInfo :: exists()是否返回true?關於編譯器的好處是,您可能需要將它們放在一起並用反斜槓轉義空格,但也可以用引號將整個字符串轉義。 – TheDarkKnight 2014-11-21 14:15:09

+0

看到我的編輯,問題與此無關,並且提出的解決方案仍然無法正常工作。使用'xdg-open'的問題更多,它不處理百分比編碼的URL,這就是QDesktopServices :: openUrl()所做的事情,我查看了源代碼,並且發佈了代碼的相關部分。請記住,即使引號是百分比編碼的,所以它仍然會失敗。另外,我寫道我已經驗證它已經存在。 – sashoalm 2014-11-21 15:26:56

2
上QT5

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

工作就好了。從QUrl純粹加載文件像第一行

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

當我有同樣的問題,但使用的QUrl :: fromLocalFile時,它只是做了一點

相關問題