将动态变量添加到URL

时间:2017-07-18 22:51:52

标签: c++ qt qt5

我想在动画示例中添加动态变量:

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

我收到此错误:

enter image description here

2 个答案:

答案 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)

根据documentation

  

QUrlQuery类提供了一种操作键值对的方法   一个URL的查询。

     

它用于解析在URL中找到的查询字符串   以下内容:

     

enter image description here

可行的解决方案是使用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);