QUrl逐段构建
QUrl construction piece by piece
我试着逐个构建QUrl
:
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
实例的整个内部表示。
上述两种行为都正常吗?或者它们是错误?
我用的是Qt 5.7.1.
看来,简单的字符串连接不太容易出错。
至少回答您的一些问题:
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 并使用带有设置器的默认构造 QUrl 工作正常:
QUrl url;
url.setScheme("http");
url.setHost("server.com");
qDebug() << url; // QUrl("http://server.com")
setPath
使 URL 为 null 的原因是它的格式不正确。路径必须以斜杠开头。使用 url.setPath("/dir/file.htm");
.
干杯,继续战斗!
我试着逐个构建QUrl
:
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
实例的整个内部表示。
上述两种行为都正常吗?或者它们是错误?
我用的是Qt 5.7.1.
看来,简单的字符串连接不太容易出错。
至少回答您的一些问题:
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 并使用带有设置器的默认构造 QUrl 工作正常:
QUrl url;
url.setScheme("http");
url.setHost("server.com");
qDebug() << url; // QUrl("http://server.com")
setPath
使 URL 为 null 的原因是它的格式不正确。路径必须以斜杠开头。使用 url.setPath("/dir/file.htm");
.
干杯,继续战斗!