Qt 下载图片并显示图片

 

源码下载:图片下载器

 

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QHostAddress>
#include <QDebug>
#include <QMessageBox>
#include <QHostInfo>

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

}

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

//有数据可读
void MainWindow::show_data(){
    //全部获取并拷贝一份
    QByteArray str = client->readAll();
    QString str2 = str;

    //数据处理,取得文件大小
    if(str2.indexOf("Length") > 0)
    {
        str2 = str2.remove(0,str2.indexOf("Length"));   //找到报文中的file_length
        QStringList list = str2.split("\r\n");          //切割
        str2 = list[0].replace(0, 7, "");               //取得文件大小的字符串
        file_size = str2.toInt();                       //将这个字符串转为int
        ui->progressBar->setMaximum(file_size);         //设置进度条最大值
        ui->label->setNum(file_size);                   //显示文件大小
    }

    //准备下载图片文件,删去非文件内容
    int head_end = str.indexOf("\r\n\r\n");
    if(head_end > 0){
        str.remove(0, head_end+4);
    }

    //将数据写入文件
    int ret = fp->write(str);
    download_size += ret;                               //已下载字节数改变
    ui->progressBar->setValue(download_size);           //进度条进度改变

    //已下载字节数等于文件大小,即文件下载完毕,关闭文件并弹窗提示
    if(download_size == file_size){
        fp->close();
        QMessageBox::warning(this, tr("Download Tips"), tr("Download successfully!"),QMessageBox::Ok);
    }
}

//下载按钮槽函数,点击按钮发送请求
void MainWindow::on_pushButton_clicked()
{
    //file.alapi.cn/image/comic/215610-154116697054cd.jpg
    QString down_link  = ui->lineEdit->text();
    QString tmp = down_link;
    int len = down_link.indexOf("/");
     QString host =  down_link.remove(len,down_link.size());
     QString url  =  tmp.remove(0,len);

     qDebug() <<  host;
     qDebug() <<  url;


     //创建文件
     this->fp = new QFile(this);
     fp->setFileName("1.jpg");

     //打开文件,不存在则先创建文件,存在则清空
     if(fp->open(QFile::ReadWrite | QFile::Truncate)){
         qDebug() << "open file successed!";
     }

     this->download_size = 0;        //当前已经下载字节数
     this->file_size = 0;            //文件大小
     ui->progressBar->setValue(0);   //设置初始进度为0


     QHostInfo info = QHostInfo::fromName(host);
     QString IP =info.addresses().first().toString();
     qDebug() << IP;


     client = new QTcpSocket(this);  //创建对象并连接
     client->connectToHost(QHostAddress(IP), 80);
       //1.81.5.188

     //可读信号绑定
     connect(client, &QTcpSocket::readyRead, this, &MainWindow::show_data);



    //拼接下载协议
    QString str = QString("GET %1 HTTP/1.1\r\nHost:%2\r\n\r\n").arg(url).arg(host);

    client->write(str.toUtf8());
}

//显示按钮槽函数,点击按钮显示下载的图片
void MainWindow::on_pushButton_2_clicked()
{
    QImage image("./1.jpg");

    //设置图片的大小
    int  x =  ui->label_2->width();
    int  y =  ui->label_2->height();

    image  =  image.scaled(x,y);


    ui->label_2->setPixmap(QPixmap::fromImage(image));
    ui->label_2->show();
}

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值