Seite 1 von 1

QUrl: warum ist das Ergebnis nicht "isValid"? [gelöst]

Verfasst: 7. Januar 2013 23:32
von harry_m
Ich stelle mir eine URL zusammen:

Code: Alles auswählen

    QUrl url(ftpServerLineEdit->text());
    url.setScheme("ftp");
    url.setUserName(userNameLineEdit->text());
    url.setPassword(passwordLineEdit->text());
    url.setPort(21);
Später wird abgefragt, ob URL "isValid": und die Antwort lautet "false".

Wenn ich mir die URL ausdrucken lasse kommt folgendes:

"ftp://UserName:Password@:21/ftp.server.com"
(Name, Password und Server sind selbstverständlich anonymisiert, aber in Wirklichkeit kommt schon das richtige heraus)
Es kommen nur ASCII-Zeichen zum Einsatz, keine Sonderzeichen, Umlaute o.Ä.

Laut Doku soll eine "valid"-URL jedoch so aussehen:

"ftp://UserName:Password@/ftp.server.com:21"

Was habe ich übersehen?

Re: QUrl: warum ist das Ergebnis nicht "isValid"?

Verfasst: 8. Januar 2013 08:17
von der.grisu
Die Portangabe kommt hinter dem Server, also eben "ftp.server.com:21" und nicht ":21/ftp.server.com".

Re: QUrl: warum ist das Ergebnis nicht "isValid"?

Verfasst: 8. Januar 2013 09:08
von harry_m
Das ist richtig.

Nur liefert mir diese falsche Konfiguration das Objekt "url" zurück: sprich, ich schreibe die Daten mit den "set"-Methoden und wenn ich es dann aus dem Objekt "url" ausgebe, sieht es so wie abgebildet aus.

DAS ist mein Problem.

Re: QUrl: warum ist das Ergebnis nicht "isValid"?

Verfasst: 8. Januar 2013 17:12
von upsala
QUrl erwartet im Konstruktor eine URL, du übergibtst aber irgendeinen String. Dieser wird scheinbar als Pfad interpretiert. Somit hast du einen leere Serverangabe, anschließend den Port und mit dem Slash abgetrennt deinen Pfad.

Verwende den folgenden Code:

Code: Alles auswählen

QUrl url;
url.setHost("server");
url.setScheme("ftp");
url.setUserName("user");
url.setPassword("password");
url.setPort(21);

Re: QUrl: warum ist das Ergebnis nicht "isValid"?

Verfasst: 8. Januar 2013 18:09
von harry_m
Danke. Das war's...

Der String, der mit "ftpServerLineEdit->text()" übergeben wurde nicht "irgendein String", sondern der Host...

Hatte an dieser Stelle keine Bedenken, denn von mir zitierte Code-Abschnitt stammt aus dem "QFtp"-Beispiel, das ich für meine Zwecke "missbraucht" habe (es musste unter Anderem um die Benutzernamen- und Passwort-Eingabe erweitert werden). War der Meinung, dass es an dieser Stelle schon passen würde: so kann man sich täuschen. Wieder was gelernt, wenn man die Lösung weiß, ist plötzlich alles plausibel...

Nochmals besten Dank.

Gruß
Harry