首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QUrl施工一片片

QUrl施工一片片
EN

Stack Overflow用户
提问于 2017-04-25 18:42:36
回答 1查看 1.4K关注 0票数 0

我试着一片片地构建QUrl

代码语言:javascript
复制
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;

输出(密码在途中意外丢失):

QUrl("http://user@server.com:81/path?key1=value1&key2=value2&key3=value3#fragment")

首先,如果QUrl是默认构造的,那么使用setter我根本不能在其中添加任何内容。

在上面的代码中,如果我最后只删除一行注释,那么输出就变成QUrl("")。也就是说,QUrl::setPath清理了QUrl实例的整个内部表示。

这两种行为都正常吗?还是它们是虫子?

我使用QT5.7.1。

看起来,这个简单的字符串连接就不那么容易出错了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-25 19:50:58

至少要回答你的一些问题:

qDebug() << url;吃了密码,这是一件好事。为什么?因为qDebug和朋友经常用来编写日志文件,在日志文件中甚至在控制台上设置密码都很糟糕,真的很糟糕。因此,默认情况下,qDebug会吃掉密码。如果需要的话,打电话给qDebug() << url.toString()。(你已被警告过;)

QUrl url("server.com"); url.setScheme("http");导致http:server.com的原因是,在QUrl url("server.com");中,"server.com“被解析并识别为路径,而不是主机。

我使用的是5.7.0,并使用默认构造的带有setter的QUrl可以很好地工作:

代码语言:javascript
复制
QUrl url;
url.setScheme("http");
url.setHost("server.com");
qDebug() << url; // QUrl("http://server.com")

setPath使URL为空的原因是它的格式不正确。路径必须以斜杠开始。使用url.setPath("/dir/file.htm");

干杯,继续战斗!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43618586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档