我想在动画示例中添加动态变量:
QNetworkRequest req( QUrl( QString("http://website.com/?test=1&id=1") ) );
但是当我尝试这个时:
// the HTTP request
varUrl = "http://website.com/?test=";
varUrl += info;
varUrl += "&id=";
varUrl += info_2;
QNetworkRequest req( QUrl( QString(varUrl) ) );
QNetworkReply *reply = mgr.get(req);
eventLoop.exec(); // blocks stack until "finished()" has been called
我收到此错误:
答案 0 :(得分:3)
您发布的错误消息部分无关。你的实际问题是:
QNetworkRequest req( QUrl( QString(varUrl) ) );
这被视为函数声明。这是C ++中的一个极端案例,它通常被称为“最令人烦恼的解析”。有关说明,请参阅https://en.wikipedia.org/wiki/Most_vexing_parse。
无论如何,请使用QUrl::fromUserInput()
静态函数,而不是直接传递查询字符串。这将正确编码查询(否则您需要手动正确手动编码查询。)简而言之,将上面的行更改为:
QNetworkRequest req(QUrl::fromUserInput(varUrl));
这也解决了解析问题;上面的处理方式正如变量定义,而不是函数声明,现在你的代码编译得很好。
作为旁注,您可以使用QString::arg()
函数一次构造字符串,而无需使用追加(+=
)操作。所以你可以像这样构建你的URL字符串:
varUrl = QString("http://website.com/?test=%1&id=%2").arg(info).arg(info_2);
%1
将替换为info
和%2
的内容,其内容为info_2
。
答案 1 :(得分:3)
QUrlQuery类提供了一种操作键值对的方法 一个URL的查询。
它用于解析在URL中找到的查询字符串 以下内容:
可行的解决方案是使用QUrlQuery
:
QString info = "1";
QString info_2 = "1";
QUrl url("http://website.com/");
QUrlQuery query;
query.addQueryItem("test", info);
query.addQueryItem("id", info_2);
url.setQuery(query);