Как я могу прочитать данные, отправленные с сервера в переменной типа QNetWorkReply? - PullRequest
0 голосов
/ 24 августа 2011

Я использовал этот код для отправки имени пользователя и пароля на сервер методом POST. Это возвращает мне ответ, так как я могу получить доступ к переменной ответа таким образом, чтобы я мог читать данные, отправленные с сервера обратно ко мне ??

Используемый код:

void MainWindow::post(QString name, QString password)
{
    QUrl serviceUrl = QUrl("http://lascivio.co/mobile/post.php");
    QByteArray postData;
    QString s = "param1="+name+"&";
    postData.append(s);
    s = "param2=" +password;
    postData.append(s);
    QNetworkAccessManager *networkManager = new QNetworkAccessManager(this);
    connect(networkManager, SIGNAL(finished(QNetworkReply*)), this,     SLOT(serviceRequestFinished(QNetworkReply*)));
    QNetworkRequest request;
    request.setUrl(serviceUrl);
    QNetworkReply* reply = networkManager->post(request, postData);
}
void MainWindow::serviceRequestFinished(QNetworkReply* reply)
{
//????????????
}

1 Ответ

3 голосов
/ 24 августа 2011

QNetworkReply - это QIODevice, поэтому вы можете читать его так же, как и файл. Но вы должны уничтожить QNetworkReply и проверить на наличие ошибок в этом слоте.

Например, в простейшем случае (без перенаправления HTTP):

void MainWindow::serviceRequestFinished(QNetworkReply* reply)
{
    // At the end of that slot, we won't need it anymore
    reply->deleteLater();

    if(reply->error() == QNetworkReply::NoError) {
        QByteArray data = reply->readAll();
        // do something with data
        ...
    } else {
        // Handle the error
        ...
    }
}

Вы, вероятно, должны объявить переменную QNetworkAccessManager как член вашего класса, а не создавать новую для каждого запроса.

...