Skip to content

【Qt】网络图片下载与显示

1. 实现效果如下图

alt text

2.核心源代码

(1) mainwindow.h

cpp
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QNetworkAccessManager>
#include <QNetworkReply>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

public slots:


private slots:
    void on_m_pBtn_clicked();
    void replyFinished(QNetworkReply *reply);

private:
    Ui::MainWindow *ui;

    QNetworkAccessManager netManager;

};

#endif // MAINWINDOW_H

(2) mainwindow.cpp

cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFile>

MainWindow::MainWindow(QWidget *parent) :
   QMainWindow(parent),
   ui(new Ui::MainWindow)
{
   ui->setupUi(this);
   ui->m_pBtn->setText("Start Download");

   ui->imageLabel->setFixedSize(100,100);
   ui->imageLabel->setScaledContents(true);

   connect(&netManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));

}

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

void MainWindow::on_m_pBtn_clicked()
{
   ui->m_pBtn->setEnabled(false);

   QUrl url;
   url = QUrl(ui->urlInput->text());

   QNetworkRequest request;
   request.setUrl(url);

   netManager.get(request);

}

void MainWindow::replyFinished(QNetworkReply *reply)
{
   ui->m_pBtn->setEnabled(true);

   if(reply->error() == QNetworkReply::NoError)
   {
       QByteArray bytes = reply->readAll();
       QPixmap pixmap;
       pixmap.loadFromData(bytes);
       ui->imageLabel->setPixmap(pixmap);

       QFile file("E:/test.png");
       if (file.open(QIODevice::Append))
       {
           file.write(bytes);
       }
       file.close();
   }
   else
   {
       qDebug() << "Error\n";
   }
}

上次更新于: