Получить информацию по ценам на бензин с нескольких сайтов АЭС и записать их в отдельные члены класса для дальнейших вычислений.
Проблема:
Слот finishedSlot(QNetworkReply*) содержит алгоритм поиска нужной информации по сайту, так же в нем инициализируется одно из полей класса которое должно содержать информацию по цене на топливо. Проблема в том что данный слот по неизвестным мне причинам вызывается уже после того как создался объект класса, в момент return a.exec();
Вопрос:
Почему сначала срабатывает функция showPriceOkko() в main а затем происходит все, что описанно в finishedSlot(). Насколько я представляю последовательность, сначало все что в конструкторе а потом уже все остальное. Хотя у меня есть предположение что connect происходит именно тогда когда у объекта QApplication вызывается метод exec() Какое решение будет лаконичнее всего на ваше авторитетное для меня мнение
Header:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include<QNetworkAccessManager>
#include<QNetworkRequest>
#include<QNetworkReply>
#include<QDebug>
#include<QUrl>
class MainWindow : public QMainWindow
{
Q_OBJECT
private:
QNetworkAccessManager* NAManager;
QNetworkReply* reply;
QUrl url;
double okkoGazCost;
double wogGazCost;
double shellGazCost;
double brsmGazCost;
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
void showPriceOkko();
signals:
public slots:
void finishedSlot(QNetworkReply*);
};
#endif // MAINWINDOW_H
------------------------------------------------------------------
CPP:
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{
url = "http://www.okko.ua/ru/types-of-fuel";
NAManager = new QNetworkAccessManager(this);
connect(NAManager, SIGNAL (finished(QNetworkReply*)),
this, SLOT (finishedSlot(QNetworkReply*)));
reply = NAManager->get(QNetworkRequest(url));
}
MainWindow::~MainWindow()
{
}
void MainWindow::showPriceOkko()
{
qDebug() << "getOKKO: " << okkoGazCost;
}
void MainWindow::finishedSlot(QNetworkReply *)
{
QString buffer;
if (reply->error() == QNetworkReply::NoError)
{
QByteArray bytes = reply->readAll();
QString string(bytes);
for(int i(0); i < string.length(); ++i)
{
if(string[i] == 'g' && string[i + 1] == 'a' && string[i + 2] == 'z')
{
buffer += string[i+11];
buffer += string[i+12];
buffer += string[i+13];
buffer += string[i+14];
break;
}
}
okkoGazCost = buffer.toDouble();
qDebug() << "OKKO: " << okkoGazCost;
buffer.clear();
}
else
qDebug() << "error Connection to OKKO";
reply->deleteLater();
}
--------------------------------------------------------------------------------------
MAIN:
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.showPriceOkko();
return a.exec();
}
----------------------------------------------------------