2017-07-18 68 views
1

我想动态变量添加到URL例如:添加动态变量的URL

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

您发布的错误消息部分无关。您的实际问题是:

QNetworkRequest req(QUrl(QString(varUrl))); 

这被视为函数声明。这是C++中的一个角落案例,它通常被称为“最令人头疼的解析”。有关说明,请参阅https://en.wikipedia.org/wiki/Most_vexing_parse

无论如何,请使用QUrl::fromUserInput()静态函数,而不是直接传递查询字符串。这将正确编码查询(否则你需要手动手工正确编码查询。)因此,在短期,改变上述行:

QNetworkRequest req(QUrl::fromUserInput(varUrl)); 

这也修复了解析问题;上面的处理就像一个变量定义,而不是一个函数声明,并且你的代码现在应该可以很好地编译。作为旁注,您可以使用QString::arg()函数一次构建您的字符串,而不必使用append(+=)操作。所以,你可以构建你的URL字符串是这样的:

varUrl = QString("http://website.com/?test=%1&id=%2").arg(info).arg(info_2); 

%1将与info内容所代替,并用%2info_2内容。

+0

现代解决令人烦恼的解析:'QUrl {的QString {varUrl}}'。 – MSalters

2

按照documentation

The QUrlQuery class provides a way to manipulate a key-value pairs in a URL's query.

It is used to parse the query strings found in URLs like the following:

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); 
+0

这是一个更好的方法。对这些东西进行编码可能是一种痛苦。 – tadman

+1

@tadman您也可以使用'QUrl :: fromUserInput()'静态函数来正确编码输入。 –

+0

是的,这也是一个选项,但看到作者如何建立他的网址代码我认为这是一个更好的选择。 – eyllanesc