Seite 1 von 1

QDesktopServices::openUrl() - %20 im Dateinamen (Linux)

Verfasst: 25. März 2008 10:13
von pfid
Hallo,

in einem bestehenden Programm, welches unter Linux, Mac OS und Windows im Einsatz ist, sollen Verweise zu Dateien hinterlegt werden. Konkret werden die Dateipfade in einer Datenbank abgelegt. Diese sollen per Klick geöffnet werden, wenn der Pfad verfügbar ist.
Bis jetzt habe ich das mit QDesktopServices::openUrl() realisiert. Das funktioniert unter Linux und Windows. Nur leider gibts Probleme, sobald im Pfad Leerzeichen vorkommen. (keine Leerzeichen in Dateien zu verwenden ist keine Option, da auf einen bestehenden Fileserver zurückgegriffen wird, der eine Vielzahl Ordner/Files hält)

Unter Windows lassen sich die Dateien weiterhin öffnen, da die %-Url-Encodierung wohl keine Probleme macht. Unter Linux habe ich partout keine Möglichkeit gefunden, eine Datei mit Space im Namen (bzw. %20) zu öffnen. QDesktopServices gibt keinen Fehler zurück, lediglich in der Konsole bekomm ich
Error: no such file "/path/to/file%20name.suffix"
Ein

Code: Alles auswählen

QProcess::startDetached("kfmclient exec '" + filePath + "'");
öffnet die Datei leider auch nicht, genauso wenig wie

Code: Alles auswählen

QProcess::startDetached("xdg-open '" + filePath + "'");
Wäre auch ein Rückschritt in Sachen Plattformunabhängigkeit.

Kennt jemand einen Workaround, oder eine Alternative, wie ich Platformübergreifend beliebige Dateien aus dem Programm heraus öffnen kann?

[edit] Ich öffne die Datei mit

Code: Alles auswählen

QDesktopServices::openUrl(QUrl::fromLocalFile(filePath))
Per google bin ich auf irgendein IRC-Log gestoßen, wo jemand das gleiche Problem hat. Es hängt wohl mit xdg-open zusammen, der nicht die korrekte Anwendung aufruft. Bringt mich nun aber nicht weiter, außer dass ich mir denke, dass zumindest mein Code korrekt ist.

Verfasst: 14. April 2009 19:22
von Leffotrak
Gibts da eine Lösung für? Habe derzeitig dasselbe Problem :(

Verfasst: 15. April 2009 12:45
von pfid

Code: Alles auswählen

#ifdef Q_MS_WIN
   if (!QDesktopServices::openUrl(filePath))
#else
   if (!QDesktopServices::openUrl(QUrl::fromLocalFile(filePath)))
#endif
   {
      QMessageBox::critical(parent, "Fehler", "" + filePath +"\n\nkonnte nicht geöffnet werden.");
      return fail;
   }

Verfasst: 15. April 2009 13:04
von Christian81
openURL() erwartet eine URL, keinen Filepath. Deshalb ist QDesktopServices::openUrl(filePath) falsch - es muss immer QDesktopServices::openUrl(QUrl::fromLocalFile(filePath)) sein.

Verfasst: 18. April 2009 17:58
von Leffotrak
Yup das haut hin, danke.