Dzień dobry. Chciałem do swojego programu dodać funkcje pobierania aktualnego kursu euro. Funkcja odpowiedzialna za to jest wywoływana w domyślnym konstruktorze klasy Euro. Niestety funkcja nie działa tak jak powinna tzn. Po analizie programu, wygląda to jakby program pomijał linijki kodu odpowiedzialne za pobranie i zapisanie kursu euro. Poniżej moja klasa:
Currencies.h
#ifndef CURRENCIES_H
#define CURRENCIES_H
#include <QObject>
#include <QFile>
#include <QTextStream>
#include <QtDebug>
#include <QList>
#include <QProcess>
#include <QRegularExpression>
#include <QSettings>
#include <QtNetwork/QNetworkAccessManager>
#include <QtNetwork/QNetworkReply>
#include <QtNetwork/QNetworkRequest>
#include <QtXml/QtXml>
#include <QDebug>
#include <string.h>
#include <QFile>
#include <QByteArray>
#include <QJsonObject>
#include <QJsonDocument>
#include <QObject>
#include <algorithm>
#include <QSettings>
#include "Connections.h"
namespace Currency {
class Euro : public QObject
{
Q_OBJECT
private:
double euroRate;
double finalPriceEuro;
QString const urlEuroString;
Connection::Status connectStatus;
QSettings settings;
public:
Euro();
~Euro();
double GetEuroRate() const;
void SetEuroRate(double);
void SetFinalPriceEuro(double);
double GetFinalPriceEuro() const;
QString GetEuroUrl() const;
void SaveEuroRate();
double LoadEuroRate() const;
void DownloadEuroRate();
};
}
Currencies.cpp
#include"Currencies.h"
//Euro
Currency::Euro::Euro():
euroRate(0.0),
finalPriceEuro(0.0),
urlEuroString("http://api.nbp.pl/api/exchangerates/rates/a/eur/?format=json")
{
DownloadEuroRate();
}
Currency::Euro::~Euro()
{
}
double Currency::Euro::GetEuroRate() const{
return euroRate;
}
void Currency::Euro::SetEuroRate(double rateValue){
euroRate = rateValue;
}
QString Currency::Euro::GetEuroUrl() const{
return urlEuroString;
}
void Currency::Euro::SetFinalPriceEuro(double price)
{
finalPriceEuro = price;
}
double Currency::Euro::GetFinalPriceEuro() const
{
return finalPriceEuro;
}
void Currency::Euro::SaveEuroRate(){
QSettings settings;
settings.beginGroup("Currency");
settings.setValue("euroRate",GetEuroRate());
settings.endGroup();
}
double Currency::Euro::LoadEuroRate() const
{
QSettings settings;
settings.beginGroup("Currency");
return settings.value("euroRate").toDouble();
settings.endGroup();
}
void Currency::Euro::DownloadEuroRate()
{
QNetworkAccessManager* manager = new QNetworkAccessManager(this);
connect(manager,&QNetworkAccessManager::finished,this,[&](QNetworkReply* reply)
{
if(reply->bytesAvailable())
{
connectStatus.SetConnectionStatus(true);
qDebug()<<"Nawiazano polaczenie";
}else
{
connectStatus.SetConnectionStatus(false);
}
if(connectStatus.GetConnectionStatus())
{
QString stringData = reply->readAll();
QFile file("temp.json");
QTextStream stream(&file);
if(file.open(QIODevice::WriteOnly|QIODevice::Text))
{
stream<<stringData;
}
file.close();
QJsonDocument doc = QJsonDocument::fromJson(stringData.toUtf8());
QJsonObject rootObj = doc.object();
QJsonValue rates = rootObj.value("rates");
if (rates.type() == QJsonValue::Array) {
QJsonArray ratesArray = rates.toArray();
for (int i = 0; i < ratesArray.count(); i++) {
QJsonValue ratesChild = ratesArray.at(i);
if (ratesChild.type() == QJsonValue::Object) {
QJsonObject ratesObj = ratesChild.toObject();
QJsonValue midValue = ratesObj.value("mid");
SetEuroRate(midValue.toDouble());
SaveEuroRate();
}
}
}
}
else
{
SetEuroRate(LoadEuroRate());
SaveEuroRate();
qDebug()<<"Brak nowego kursu euro";
}
});
manager->get(QNetworkRequest(QUrl(GetEuroUrl())));
}
mainwindow.cpp
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
Currency::Euro* euroPtr = new Currency::Euro();
Currency::Dollar* dollarPtr = new Currency::Dollar();
Currency::Pound* poundPtr = new Currency::Pound();
delete euroPtr;
delete dollarPtr;
delete poundPtr;
}
Niestety nie mogę znaleźć błędu. Wydaje mi się, że jest coś nie tak z funkcją DownloadEuroRate() ale nie wiem co. Jeżeli ktoś ma jakiś pomysł jak to rozwiązać, będę wdzięczny za każdą wskazówkę. Pozdrawiam !
http://api.nbp.pl/api/exchangerates/tables/a/last/1/