CREATE TABLE book( id_book SMALLINT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(255), author VARCHAR(255), isbn VARCHAR(255)) Engine=InnoDB;
Tässä esimerkissä esitetään, kuinka book-taulun data saadaan haettua Qt-sovellukseen.
Jotta esimerkki toimii, on ensin kirjauduttava sovellukseen ja tähän tarvitaan login-systeemi, jossa käytetään http-post metodia.
#include <QNetworkAccessManager> #include <QNetworkReply> #include <QNetworkRequest> #include <QJsonDocument> #include <QJsonObject> #include <QJsonArray>
QNetworkAccessManager *manager;
void onGetBookClicked();
void MainWindow::onGetBookClicked()
{
QString site_url="http://localhost:3000/book";
QNetworkRequest request(site_url);
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
//WEBTOKEN ALKU
QByteArray myToken="Bearer "+webToken;
request.setRawHeader(QByteArray("Authorization"),(myToken));
//WEBTOKEN LOPPU
//luo manager konstruktorissa, jos sinulla on monta requestia sovelluksessa
manager = new QNetworkAccessManager(this);
QNetworkReply *reply = manager->get(request);
connect(reply, &QNetworkReply::finished, this, [reply, this]() {
// Tarkistetaan verkkovirheet
if (reply->error() != QNetworkReply::NoError) {
qWarning() << "Network error:" << reply->errorString();
reply->deleteLater();
return;
}
QByteArray response_data = reply->readAll();
qDebug() << "DATA : " + response_data;
QJsonDocument json_doc = QJsonDocument::fromJson(response_data);
QJsonArray json_array = json_doc.array();
//Tässä toimenpiteet JSON-arrayn käsittelyyn
reply->deleteLater();
});
}
Huomaa rakenne: Button-slotti (onGetBookClicked) on erillinen metodi, mutta HTTP-vastauksen käsittely tehdään lambda-funktiolla. Tämä on paras käytäntö, koska button-slottia voidaan kutsua toistuvasti ja sitä voidaan testata, kun taas HTTP-vastauksen käsittely on kerta-käyttöinen ja liittyy juuri tähän pyyntöön.