Seite 1 von 1

Konvertierung von Pfad/QString

Verfasst: 29. Dezember 2007 23:40
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 ;)

Verfasst: 29. Dezember 2007 23:50
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...

Verfasst: 30. Dezember 2007 01:09
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 \\ ....

Verfasst: 30. Dezember 2007 12:03
von Christian81
QUrl::fromLocalFile() und QUrl::toLocalFile()

Verfasst: 30. Dezember 2007 13:40
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 :-(.