Ktoś mógłby wyjaśnić jak zrobić najprostszy program z użyciem tej biblioteki oraz konkretnie metod GET i POST. Nie ogarniam w pełni jak to dokładnie funkcjonuje tzn. jak wykonać zapytanie i odczytać dane z odpowiedzi.
Sądząc po mnogości odpowiedzi to raczej każdy woli takie rzeczy obsługiwać w innych językach.
Szpecem nie jestem ale po przeanalizowaniu paru przykładów:
http://www.codeprogress.com/cpp/libraries/qt/showQtExample.php?index=581&key=QNetworkAccessManagerDownloadFileHTTP
http://www.cppfun.com/qt-http-get-post.htm
http://www.bogotobogo.com/Qt/Qt5_Downloading_Files_QNetworkAccessManager_QNetworkRequest.php
i przejrzeniu dokumentacji:
http://doc.qt.io/qt-5/qnetworkaccessmanager.html#post
http://doc.qt.io/qt-5/qnetworkreply.html
http://doc.qt.io/qt-5/qurl.html
http://doc.qt.io/qt-5/qnetworkrequest.html
można dojść do jakichś wniosków np metoda QNetworkAccessManager::get(QNetworkRequest) zwraca wskaźnik na obiekt typu QNetworkReply i emituje dla tego obiektu sygnał readyRead(), po zakończeniu wczytywania danych obiekt emituje sygnał finished():
reply = manager->get(req);
connect(reply, SIGNAL(readyRead()), this, SLOT(urlRead()));
connect(reply, SIGNAL(finished()), this, SLOT(urlFinished()));
slot urlRead wczytuje dane typu QByteArray z obiektu reply za pomocą metody readAll (pochodzącej z klasy QIODevice po której QNetworkReply dziedziczy)
void MainWindow::urlRead()
{
buffer += reply->readAll();
}
a w slocie urlFinished() możemy np przerobić te dane na tekst lub wpisać dane do obrazka itp itd:
void MainWindow::urlFinished()
{
QString data(buffer);
ui->textBrowser->setText(data);
}
Natomiast metoda post przyjmuje dwa argumenty typu QNetworkRequest i QByteArray, w QNetworkRequest ustawiamy dane strony do wysłania danych (nie znam się na tym więc tutaj nie wiem dokładnie jak to działa):
QString txt = ui->textEdit->toPlainText();
QByteArray postData;
postData.append(txt);
QNetworkRequest request = QNetworkRequest(QUrl(ui->lineEdit->text()));
request.setRawHeader("Content-Type", "application/x-www-form-urlencoded");
manager->post(request, postData);
connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(sendFinished(QNetworkReply*)));
Teraz tutaj aby otrzymać informacje o zakończeniu wysyłania i ewentualnych błędach łączymy sygnał wysyłany przez obiekt typu QNetworkAccesManager ze slotem w którym te informacje sobie można przetworzyć:
void MainWindow::sendFinished(QNetworkReply *r)
{
disconnect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(sendFinished(QNetworkReply*)));
if(r->error() == QNetworkReply::NoError)
ui->textBrowser->setText("wysyłanie zakończone bez błędu");
else
ui->textBrowser->setText(QString("Błąd przy wysyłaniu: ") + r->errorString());
}