Russian Qt Forum

Qt => Работа с сетью => Тема начата: digwnews от Июль 06, 2011, 22:55



Название: QNetworkAccessManager
Отправлено: digwnews от Июль 06, 2011, 22:55
Изучаю QT. Написал мини-программу, которая загружает определённый сайт.
Вот:
mainwindow.h

Код:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QNetworkReply>

namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    void downn(QString url);

private:
    Ui::MainWindow *ui;
private slots:
    void FinishDownload(QNetworkReply * point);
};

#endif // MAINWINDOW_H

main.cpp

Код:
#include <QtGui/QApplication>
#include "mainwindow.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.downn("http://ya.ru");
    w.show();

    return a.exec();
}

mainwindow.cpp

Код:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtNetwork/QNetworkAccessManager>
#include <QtNetwork/QNetworkReply>
#include <QNetworkRequest>
#include <QUrl>
#include <QMessageBox>
#include <QNetworkReply>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

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

void MainWindow::downn(QString url)
{
    QNetworkAccessManager manager;
    QObject::connect(&manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(FinishDownload(QNetworkReply*)));
    QNetworkRequest req;
    QUrl urlto;
    urlto.setUrl(url);
    req.setUrl(urlto);
    manager.get(req);
}

void MainWindow::FinishDownload(QNetworkReply *point)
{
    QMessageBox::about(this, "title", "ok!!!");
}

По идее в моей программе должен всегда вызываться слот FinishDownload и выкидывать мессэджбокс. Но этого не происходит. Прграмма просто открывается и всё. Никакого мессэджбокса нет.
В чём проблема?


Название: Re: QNetworkAccessManager
Отправлено: Пантер от Июль 07, 2011, 07:15
QNetworkAccessManager создан на стеке и уничтожится при выходе из функции. Создавай его в куче, то есть
QNetworkAccessManager *manager = new QNetworkAccessManager (this)


Название: Re: QNetworkAccessManager
Отправлено: digwnews от Июль 07, 2011, 10:36
Точно.
Спасибо.