QT 5.1.1 - 在Post Request中设置urlQuery的问题

时间:2013-11-05 01:19:25

标签: c++ qt post qt5

我正在努力将一些网络代码从QT 4.8.4移植到5.1.1,似乎遇到了一个我无法弄清楚的问题。

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参数版本对我来说几乎没有任何意义。

如果有人能够阐明这两者,或者其中任何一件事,我会非常感激的!

1 个答案:

答案 0 :(得分: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);