====== 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 [[https://www.cryptonator.com/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
#include "crypto.h"
int main(int argc, char ** argv)
{
QApplication a (argc, argv);
CryptoWidget w;
w.show();
return a.exec();
}
/*
crypto.h
*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
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 [[https://gitlab.fel.cvut.cz/viteks/ppc/-/tree/master/tutorials/tut13/01-crypto|gitlabu]].
===== Vylepšení =====
Celkem jednoduše lze vylepšit program tak, aby sledoval dvě kryptoměny zároveň. Kód je opět na [[https://gitlab.fel.cvut.cz/viteks/ppc/-/tree/master/tutorials/tut13/02-crypto|gitlabu]].
{{:courses:b2b99ppc:tutorials:bez_nazvu.png?520|}}