2013-11-05 42 views
2

我正在將一些網絡代碼從QT 4.8.4移植到5.1.1,似乎遇到了一個我無法弄清楚的問題。QT 5.1.1 - 在Post請求中設置urlQuery的問題

QUrl postURL = QUrl("https://www.mywebsite/api"); 

QUrlQuery * reqParams = new QUrlQuery(); 
reqParams->addQueryItem("realEmail", email_lineEdit->text()); 
reqParams->addQueryItem("password", password_lineEdit->text()); 
reqParams->addQueryItem("confirmPassword", passConfirm_lineEdit->text()); 
reqParams->addQueryItem("firstName", firstName_lineEdit->text()); 
reqParams->addQueryItem("lastName", lastName_lineEdit->text()); 
reqParams->addQueryItem("termsAccepted", "1"); 

postURL.setQuery(reqParams); 

QNetworkRequest netReq(postURL); 
netReq.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded"); 

QSslConfiguration config = QSslConfiguration::defaultConfiguration(); 
config.setProtocol(QSsl::SslV3); 
netReq.setSslConfiguration(config); 

netReply = netManager->post(netReq); 

編譯這會給我兩個錯誤。首先,'QNetworkAccessManager::post' : no overloaded function takes 1 arguments我不知道如何解決這個問題,因爲我不需要添加任何發佈數據,它包含在QUrlQuery中,因爲我在這個印象之下這是正確的做法。

我的第二個錯誤,'void QUrl::setQuery(const QString &,QUrl::ParsingMode)' : cannot convert parameter 1 from 'QUrlQuery *' to 'const QString &'這其中有我一樣困惑。我知道那裏是setQuery的過載,需要一個QUrlQuery *,這樣一個參數的假設2參數版本的事實使得幾乎沒有了意義。

如果任何人都可以闡明兩者或兩者之一的事情,我會非常感激!

回答

0

看來你不想做一個HTTP POST,因爲你不想在請求的主體中發送任何數據。你想執行一個HTTP GET請求。對於你應該叫manager.get:

netReply = manager->get(netReq); 

如果要執行與空的身體HTTP POST請求,那麼你必須指定這樣的空字節數組:

QByteArray empty; 
netReply = manager->post(netReq, empty); 

您需要將引用(而不是指針)傳遞給qUrl :: setQuery。例如。這樣做:

QUrlQuery reqParams; 
reqParams.addQueryItem("realEmail", email_lineEdit->text()); 
... 
postURL.setQuery(reqParams);