源码下载:图片下载器
#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();
}