qt networkManager get

时间:2011-03-08 13:23:15

标签: qt qt4 qnetworkaccessmanager

我想下载在行编辑小部件中输入的网址。

我无法让它工作,有人可以给我一个简短的代码片段,可以将文件的值放到QString中吗?

void imdb::on_imdbGetButton_clicked()
{

Qstring link1 = ui->lineEdit2->text();
// QString link1 is the url to be downloaded.
}

我添加了所需的头文件..

谢谢..

1 个答案:

答案 0 :(得分:1)

我猜您正在尝试通过 http 下载文件。这是你能做的:

  1. 在你* .pro文件中添加QT += network
  2. 创建QNetworkAccessManager class;
  3. 的实例
  4. 通过QNetworkRequest对象提供您的文件网址:manager->get(QNetworkRequest("file_url"));
  5. 连接到QNetworkAccessManager的finished信号
  6. 在完成的信号处理程序中,读取QNetworkReply的内容并将其保存到本地文件中。
  7. 下面是一个小例子。下载将从MainForm类的按钮单击开始:

    mainwindow.h:

    #include <QMainWindow>
    #include <QNetworkAccessManager>
    #include <QDebug>
    #include <QUrl>
    #include <QNetworkReply>
    #include <QNetworkRequest>
    #include <QFile>
    #include <QFileInfo>
    #include <QPushButton>
    
    namespace Ui {
        class MainWindow;
    }
    
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        explicit MainWindow(QWidget *parent = 0);
        ~MainWindow();
    
    private:
        Ui::MainWindow *ui;
        QNetworkAccessManager* _manager;
    
    private slots:
        void on_pushButton_clicked();
        void downloadFinished(QNetworkReply *reply);
    };
    

    mainwindow.cpp:

    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    
        QPushButton* button = new QPushButton("Download", this);
        button->setGeometry(20, 20, 80, 30);
        connect(button, SIGNAL(clicked()), SLOT(on_pushButton_clicked()));
    
        _manager = new QNetworkAccessManager(this);
        connect(_manager, SIGNAL(finished(QNetworkReply*)), SLOT(downloadFinished(QNetworkReply*)));
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    void MainWindow::on_pushButton_clicked()
    {
        QUrl url("http://pics.mtii.com/ClassPictures2011/MIA/E110227-PMIA3-JEAN/thumbnails/P2270448%20copy.jpg");
        _manager->get(QNetworkRequest(url));
    }
    
    void MainWindow::downloadFinished(QNetworkReply *reply)
    {
        QUrl url = reply->url();
        if (reply->error())
        {
            qDebug() << "Download of " <<  url.toEncoded().constData()
                     << " failed: " << reply->errorString();
        }
        else
        {
            QString path = url.path();
            QString fileName = QFileInfo(path).fileName();
            if (fileName.isEmpty()) fileName = "download";
    
            QFile file(fileName);
            if (file.open(QIODevice::WriteOnly))
            {
                file.write(reply->readAll());
                file.close();
            }
    
            qDebug() << "Download of " <<  url.toEncoded().constData()
                     << " succeded saved to: " << fileName;
        }
    }
    

    希望这有帮助,尊重