Название: 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
Точно. Спасибо.
|