我试图逐段构造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(“ ”)
首先,如果
QUrl
是默认构造的,那么使用setter根本无法在其中添加任何内容。在上面的代码中,如果我取消注释最后一行,则输出变为
QUrl("")
。那就是QUrl::setPath
清理QUrl
实例的整个内部表示。两种行为都正常吗?还是他们的虫子?
我使用Qt 5.7.1。
看来,简单的字符串连接不太容易发生错误。
最佳答案
至少回答您的一些问题:qDebug() << url;
吃了密码,那是一件好事。为什么?因为qDebug和friends通常用于写入日志文件,并且在日志文件中甚至在控制台上具有密码是很糟糕的,所以确实很糟糕。因此,默认设置是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可以正常工作:
QUrl url;
url.setScheme("http");
url.setHost("server.com");
qDebug() << url; // QUrl("http://server.com")
setPath
使URL为空的原因是因为它的格式不正确。路径必须以斜杠开头。使用url.setPath("/dir/file.htm");
。欢呼,继续战斗!
关于c++ - QUrl逐段构建,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43618586/