Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Qt C++ QNetworkAccessManager

Ostatnio zmodyfikowano 2016-08-21 20:46
Autor Wiadomość
Kefirek
Temat założony przez niniejszego użytkownika
Qt C++ QNetworkAccessManager
» 2016-08-21 11:56:14
Witam
Piszę program, w którym pobieram kurs waluty z http://api.nbp.pl/api/exchangerates/rates/a/nok/
Pobieranie kursu waluty działa. Pobranie następuje z 2 może 3 sekundowym opóźnieniem od pojawienia się MainWindow.
Kurs pobierany jest przy starcie programu także kod odpowiedzialny za pobranie kursu umieszczony jest w konstruktorze Klasy MainWindow.
Dane o kursie konwertowane są do QString i wartością tą ustawiany jest text QLabel który znajduje się na MainWindow.
Następnie Text z QLabel przypisywany jest do  finansialState->SetKursNok(ui->LblKursNok->text().toDouble());

Niestety zmienna klasy Finans KursNok, którą ustawia finansialState->SetKursNok ma wartość równą 0.
Poniżej wynik działania w debuggerze:
finansialState:  0  , //yyyyy
Średni kurs:  "0.4620" //xxxxx

C/C++
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow( QWidget * parent )
    : QMainWindow( parent )
     , ui( new Ui::MainWindow )
{
    ui->setupUi( this );
   
    //aktualizacja kursu nok
    m_networkManager = new QNetworkAccessManager( this ); // Instance variable
    connect( m_networkManager, SIGNAL( finished( QNetworkReply * ) ), this, SLOT( onRequestCompleted( QNetworkReply * ) ) );
    // m_networkManager->get(request);
    m_networkManager->get( QNetworkRequest( QUrl( "http://api.nbp.pl/api/exchangerates/rates/a/nok/" ) ) );
   
    finansialState = new Finans;
    finansialState->SetKursNok( ui->LblKursNok->text().toDouble() );
    qDebug() << "finansialState: " << finansialState->GetKursNok(); //finansialState:  0 (XXXXX)
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::onRequestCompleted( QNetworkReply * reply )
{
    if( !reply->atEnd() )
    {
        QByteArray data = reply->readAll();
       
        QString dane = data;
       
        int lenght = 0;
       
        for( int i = 0; i < dane.size(); i++ )
        {
            lenght++;
        }
       
        sredniKursNok = dane.mid(( dane.size() - 9 ), 6 );
        qDebug() << "Średni kurs: " << sredniKursNok; //Średni kurs:  "0.4620" (yyyyy)
        ui->LblKursNok->setText( sredniKursNok );
    }
}

Sens działania programu zależy od wykorzystania kursu waluty do przemnożenia istniejących danych liczbowych umieszczonych w polach edycyjnych, które będą aktualizowane przez przemnożenie
przez kurs waluty. Także przy starcie programu ta dana musi być dostępna. Co może być przyczyną tego że mimo występowania w kodzie pierw kodu do pobrania kursu, potem kodu do przypisania kursu do innej zmiennej wykonuje się pierw kod przypisania kursu do innej zmiennej a potem dopiero pobranie kursu - tak jak widać to powyżej w wyniku działania w debuggerze?
Pozdrawiam i czekam na podpowiedzi.
P-151015
mateczek
» 2016-08-21 18:23:22
C/C++
finansialState->SetKursNok( ui->LblKursNok->text().toDouble() );
//przenieś to do slotu
P-151018
Kefirek
Temat założony przez niniejszego użytkownika
» 2016-08-21 20:46:36
Dzięki działa.
POzdrawiam
P-151019
« 1 »
  Strona 1 z 1