Qt-ohjelmointi
Esimerkkejä
Näissä esimerkeissä oletetaan, että backendissä on web-tokenilla suojattu endpoint http://localhost:3000/book, jonne on tehty CRUD operaatiot book-taululle. Mainittu book-taulu luotu koodilla
CREATE TABLE book(
id_book SMALLINT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255),
author VARCHAR(255),
isbn VARCHAR(255)) Engine=InnoDB;
Http GET

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.

  1. Luo uusi Qt Widget projekti
  2. Lisää QtNetwork moduuli joko pro-tiedostoon tai CMakeLists.txt-tiedostoon
  3. Lisää mainwindow.h tiedostoon rivit:
    #include <QNetworkAccessManager>
    #include <QNetworkReply>
    #include <QNetworkRequest>
    #include <QJsonDocument>
    #include <QJsonObject>
    #include <QJsonArray>
    
  4. Lisää mainwindow.h tiedoston private osaan:
    QNetworkAccessManager *manager;
    
  5. Lisää mainwindow.h tiedostoon private slots osioon:
    void onGetBookClicked();
    
  6. Lisää mainwindow.ui-tiedostoon PushButton ja kytke sen clicked signaali slottiin onGetBookClicked (joko UI-editorissa tai koodissa).
  7. Kirjoita mainwindow.cpp tiedostoon slot-funktio:
    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.



Toggle Menu