Warning
This page is located in archive. Go to the latest version of this course pages. Go the latest version of this page.

13. Qt - databáze

Cvičení je zaměřeno na vytvoření jednoduché databazáze, do které se ukládá aktuální cena některé z kryptoměn, např. doge. Pro získání ceny kryptoměny existuje několik webových API, zde použijeme API cryptonator.com.

Základ programu je podobný jako ve cvičení, kde jsme získávali informace o covidové situaci nebo o aktuálním počasí. Zde je kód umístěn do třídy, kterou budeme dále rozšiřovat.

/*
    main.cpp
*/
#include <QApplication>
 
#include "crypto.h"
 
int main(int argc, char ** argv)
{
    QApplication a (argc, argv);
 
    CryptoWidget w;
    w.show();
 
    return a.exec();
}

/*
    crypto.h
*/
#include <QEventLoop>
#include <QWidget>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QDebug>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
 
class CryptoWidget : public QWidget
{
    Q_OBJECT
 
public:
    CryptoWidget (QWidget * parent = 0) : QWidget(parent)
    {
        fetch();
    } 
 
public slots:
 
    void fetch ()
    {
        QEventLoop loop;
        QNetworkAccessManager mgr;
        QObject::connect (&mgr, QNetworkAccessManager::finished, &loop, QEventLoop::quit);
        QNetworkRequest req (QUrl ("https://api.cryptonator.com/api/ticker/doge-usd"));
        QNetworkReply *rep = mgr.get(req);
        loop.exec();
 
        if (rep->error() == QNetworkReply::NoError)
        {
            QString rep_str = (QString)rep->readAll();
            QJsonDocument res_json = QJsonDocument::fromJson(rep_str.toUtf8());
            QJsonObject data = res_json.object();
            // timestamp
            unsigned long time = data["timestamp"].toDouble();
            qDebug() << time;
            QJsonObject ticker = data["ticker"].toObject();
            // price
            double price = QString(ticker["price"].toString()).toDouble();
            qDebug() << price;
            QString base = ticker["base"].toString();
            qDebug() << base;
        }
    }
};

# crypto.pro
TEMPLATE = app
TARGET = 01-crypto
QT += widgets network
CONFIG += console
HEADERS += crypto.h 
SOURCES += main.cpp

Kompletní kód příkladu založeného na výše uvedeném kódu je k dispozici na gitlabu.

Vylepšení

Celkem jednoduše lze vylepšit program tak, aby sledoval dvě kryptoměny zároveň. Kód je opět na gitlabu.

courses/b2b99ppc/tutorials/13.txt · Last modified: 2021/05/13 21:50 by viteks