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

Alles rund um die Programmierung mit Qt
Antworten
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

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

Beitrag 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.
Leffotrak
Beiträge: 26
Registriert: 12. Mai 2007 10:44

Beitrag von Leffotrak »

Gibts da eine Lösung für? Habe derzeitig dasselbe Problem :(
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag 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;
   }
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

openURL() erwartet eine URL, keinen Filepath. Deshalb ist QDesktopServices::openUrl(filePath) falsch - es muss immer QDesktopServices::openUrl(QUrl::fromLocalFile(filePath)) sein.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Leffotrak
Beiträge: 26
Registriert: 12. Mai 2007 10:44

Beitrag von Leffotrak »

Yup das haut hin, danke.
Antworten