2017-04-25 4 views
0

j'ai essayé de construire QUrl pièce par pièce:pièce de construction qurl par pièce

QUrl url{"https://host.org/path"}; 
url.setScheme("http"); 
url.setPort(81); 
url.setUserName("user"); 
url.setPassword("password"); 
url.setHost("server.com"); 
QUrlQuery urlQuery; 
urlQuery.setQueryItems({{"key1", "value1"}, {"key2", "value2"}, {"key3", "value3"}}); 
url.setQuery(urlQuery); 
url.setFragment("fragment"); 
//url.setPath("dir/file.htm"); 
qDebug() << url; 

sortie (mot de passe est accidentellement manqué sur le chemin):

qurl ("http://[email protected]:81/path?key1=value1&key2=value2&key3=value3#fragment")

Tout d'abord, si QUrl est construit par défaut, je ne peux rien y ajouter à l'aide de setters.

Dans le code ci-dessus si je ne décommente pas la dernière ligne, la sortie est devenue QUrl(""). C'est QUrl::setPath nettoyer la totalité de la représentation interne de l'instance QUrl.

Les deux comportements mentionnés sont-ils normaux? Ou sont-ils les bugs?

J'utilise Qt 5.7.1.

Il semble que cette simple concaténation de chaîne soit beaucoup moins sujette aux bogues.

+0

Si j'écris 'QUrl url (" server.com "); url.setScheme ("http"); 'alors' url' contient 'http: server.com' et' QNetworkAccessManager' me dit 'Host not found'. Est-ce normal? – Orient

Répondre

1

Pour répondre à au moins certaines de vos questions:

qDebug() << url; mange le mot de passe et qui est une bonne chose. Pourquoi? Parce que qDebug et amis sont souvent utilisés pour écrire des fichiers journaux et avoir un mot de passe dans les fichiers journaux ou même sur la console est mauvais, vraiment mauvais. Donc, la valeur par défaut est que qDebug mange le mot de passe. Si vous en avez besoin, appelez le qDebug() << url.toString(). Vous avez été mis en garde;)

Pourquoi QUrl url("server.com"); url.setScheme("http"); résultats dans http:server.com est parce que dans QUrl url("server.com"); « server.com » est analysé et reconnu comme le chemin et non l'hôte.

J'utilise 5.7.0 et en utilisant un défaut construit qurl avec setters fonctionnent très bien:

QUrl url; 
url.setScheme("http"); 
url.setHost("server.com"); 
qDebug() << url; // QUrl("http://server.com") 

La raison pour laquelle setPath fait l'hypothèse nulle d'URL est parce qu'il est mal formé. Le chemin doit commencer par une barre oblique. Utilisez url.setPath("/dir/file.htm");.

Bravo et continuez à vous battre!