Russian Qt Forum
Ноябрь 24, 2024, 01:43 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QNetworkAccessManager  (Прочитано 3921 раз)
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 и выкидывать мессэджбокс. Но этого не происходит. Прграмма просто открывается и всё. Никакого мессэджбокса нет.
В чём проблема?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Июль 07, 2011, 07:15 »

QNetworkAccessManager создан на стеке и уничтожится при выходе из функции. Создавай его в куче, то есть
QNetworkAccessManager *manager = new QNetworkAccessManager (this)
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
digwnews
Гость
« Ответ #2 : Июль 07, 2011, 10:36 »

Точно.
Спасибо.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.132 секунд. Запросов: 23.