Как использовать QNetworkAccessManager в собственном классе?
Всем привет. Я пытаюсь написать парсер на Qt и идея такая: у меня есть главное окно (класс MainWindow который наследуется от QMainWindow) где будут отображаться результаты парсера. И я создаю собственный класс Parse, который наследуется от QObject, где будет происходить процесс получения данных из сайта и эти данные должны передаться в MainWindow для отображения. Но почему-то в классе Parse у меня не работает QNetworkAccessManager, при отправлении запроса ничего не происходит, не вызывается слот "replyFinished(QNetworkReply* reply)". Но если QNetworkAccessManager использовать в MainWindow, то всё нормально работает. Подскажите в чем может быть проблема?
parse.h:
class Parser : public QObject
{
Q_OBJECT
public:
Parser(QString site, QObject *parent=0);
void loadSite();
signals:
void finished(QNetworkReply* reply);
private slots:
void replyFinished(QNetworkReply*);
private:
QString site;
QNetworkAccessManager *manager;
};
parse.cpp. Здесь просто для проверки записываю данные в файл
Parser::Parser(QString site, QObject *parent)
: QObject(parent)
, site{site}
{
this->manager = new QNetworkAccessManager(this);
connect(this->manager, SIGNAL(finished(QNetworkReply*)), this,
SLOT(replyFinished(QNetworkReply*)));
}
void Parser::loadSite()
{
this->manager- >get(QNetworkRequest(QUrl("https://neerc.ifmo.ru/wiki/index.php?title=Заглавная_страница#.D0.90.D0.BB.D0.B3.D0.BE.D1.80.D0.B8.D1.82.D0.BC.D1.8B_.D0.B8_.D1.81.D1.82.D1.80.D1.83.D0.BA.D1.82.D1.83.D1.80.D1.8B_.D0.B4.D0.B0.D0.BD.D0.BD.D1.8B.D1.85%20викиконспекты")));
}
#include <QFile>
void Parser::replyFinished(QNetworkReply *reply)
{
if(reply->error() == QNetworkReply::NoError)
{
QFile file("file.html");
if(file.open(QFile::WriteOnly))
{
file.write(reply->readAll());
}
file.close();
}
reply->deleteLater();
}
Но если тоже самое написать в MainWindow то всё нормально работает
При клике на кнопку из MainWindow создается Parser и вызывается метод внутри которого делается запрос
void MainWindow::on_pbtSearch_clicked()
{
Parser parse(ui->siteCombo->currentText());
parse.loadSite();
}