2017-07-18 56 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