Konvertierung von Pfad/QString

Alles rund um die Programmierung mit Qt
Antworten
gpxricky
Beiträge: 11
Registriert: 12. April 2007 17:55

Konvertierung von Pfad/QString

Beitrag von gpxricky »

Hallo,

ich möchte einen Pfad (oder allgemeiner einen QString) in ein anderes Format konvertieren (bin mir leider nicht sicher, ob es ISO 8859-1, UTF8 oder was ganz anderes ist).

Zumindest sollte aus:

Code: Alles auswählen

D:/Universität/Hallo #Du/
folgendes werden:

Code: Alles auswählen

file:///D:/Universit%E4t/Hallo%20%23Du/
Hab bereits alles mir Erdenkliche versucht, komme aber mittels QUrl::toPercentEncoding(path, "/:") nur zu:

Code: Alles auswählen

D:/Universit%C3%A4t/Hallo%20%23Du/
Irgendwie erwische ich nicht die richtige Konvertierung, weil aus dem ä %E4 und nicht %C3%A4 werden sollte :-(.

Ich hoffe, mir kann jemand weiterhelfen...

Liebe Grüße und einen guten Rutsch ;)
gpxricky
Beiträge: 11
Registriert: 12. April 2007 17:55

Beitrag von gpxricky »

Habe gerade entdeckt, das es just 2 Themenbeiträge weiter unten um das selbe Problem geht:

http://qtforum.de/forum/viewtopic.php?t=5838

Sorry, hatte das Thema beim Suchen nicht entdeckt...
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag von patrik08 »

Die classe
QString QFileInfo::absoluteFilePath () const
und
QString QDir::absolutePath () const
mit CDup von qdir geht man ueberall ihn....

machen den richtigen job je nach os ...
dann gibt es noch
QString QDir::currentPath () [static]
QString QDir::homePath () [static]

Ich finde nur probleme bei window file:/// lokal file da QUrl nicht automatisch interpretiert werden zu file:... mache ich einfach so....

IMO: vielleicht ist es besser im QT4.3 ....

Code: Alles auswählen


void OpenDesktop( QUrl loc )
{
    #if defined Q_WS_MAC
    /* direct mit open wegen dem finder */
    QProcess *m = new QProcess();
    QStringList macs;
    macs << loc.toString();  /* oeffnet der default browser oder programm */
    m->startDetached(QString("open") , macs );
    ///////std::cout << "OpenDesktop [" << qPrintable(macs.join(" ")) << "]" << std::endl;
    return;
    #endif 
    
#if defined Q_WS_WIN
    
    QString fullFileName = loc.toString();
    
    if (fullFileName.startsWith("http://", Qt::CaseInsensitive) or 
        fullFileName.startsWith("https://", Qt::CaseInsensitive) or
        fullFileName.startsWith("ftp://", Qt::CaseInsensitive) or
        fullFileName.startsWith("news://", Qt::CaseInsensitive) or
        fullFileName.startsWith("mailto:", Qt::CaseInsensitive) or
        fullFileName.startsWith("webdav://", Qt::CaseInsensitive)  )
       { 
         /* all ok */
       } else {
         fullFileName.prepend("file:///");  
       }
    bool wr = QDesktopServices::openUrl(QUrl(fullFileName));
    if (!wr) {
    QMessageBox::warning(0, tr("Error"),tr("Window Unable to open action file or dir  %1").arg(loc.toString()));
    }
return;
#endif
    
    /* linux */

     bool r = QDesktopServices::openUrl(loc);
    if (!r) {
    QMessageBox::warning(0, tr("Error"),tr("Linux Unable to open action file or dir  %1").arg(loc.toString()));
    }
    
}



und bei gewisse externe libs muss man bei window vielleicht die / umleiten zu \\ ....
.........................
speack português italiano deutsch english castellà qt
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

QUrl::fromLocalFile() und QUrl::toLocalFile()
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
gpxricky
Beiträge: 11
Registriert: 12. April 2007 17:55

Beitrag von gpxricky »

Vielen Dank für Eure schnelle Hilfe.
Leider möchte ich dir Datei anschließend nicht öffen, sondern nur den Pfadstring erhalten (also file:///[konvertierter pfad]).

QUrl:fromLocalFile() konvertiert bei mir den Pfad nicht (also ersetzt z.B. die Leerzeichen nicht durch %20, etc.) - oder mach ich da nur was falsch? Wie gesagt, ich hab schon versucht den Pfad vorher mit toPercentEndocing zu konvertieren, allerdings ist das das falsche Format... :-(

Ich bin mittlerweile ziemlich sicher, dass ich den String in ISO 8859-1 konvertieren möchte/muss. Allerdings erfüllt QString::toLatin1() bei mir irgendwie nicht seinen Dienst, sondern lässt den String, die Umlaute und die Sonderzeichen unberührt :-(.
Antworten