我是靠谱客的博主 复杂小蝴蝶,最近开发中收集的这篇文章主要介绍QT—下载器的实现,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

            对于软件的下载大家肯定会非常苦恼,因为你的下载通常伴随着各种各样的插件,让人烦躁。

     今天教大家实现一个简单的下载器,运行如下图所示:

            

                                                                                                                                                                                     源代码下载

             下载器中用到的主要有QtNetwork类中的

                            QNetworkRequest//网络请求

QNetworkAccessManager//协调网络操作,允许应用程序发送网络请求和接收网络应答
QNetworkReply//网络应答
具体知识在代码中详细说明

1, 新建工程BrowseWeb,在项目文件BrowseWeb.pro中添加QT += network(可以在QT中使用网络模块)
2,在UI界面实现如上图所示控件。
3,①首先实现网页预览功能。在BrowseWeb.h添加类的前置声明
classQNetworkReply;
classQNetworkAccessManager;
②在类的私有成员中添加
QNetworkAccessManager*manager;

                              添加私有槽函数
          privateslots:
          voidReplyFinished(QNetworkReply*);

                             ④在构造函数中定义一个QNetworkAccessManager类的对象,
用来发送网络请求和接收网络应答,
同时关联管理器的finish()信号和自定义槽。(每当网络应答结束后都会发射该信号)
manager=newQNetworkAccessManager(this);
connect(manager,SIGNAL(finished(QNetworkReply*)),
this,SLOT(ReplyFinished(QNetworkReply*)));

⑤添加私有槽的定义
voidBrowseWeb::ReplyFinished(QNetworkReply*reply)
{
QStringall=reply->readAll();//使用readAll读取所有的应答数据
ui->textBrowser->setText(all);
reply->deleteLater();
}
⑥Button槽的实现
void BrowseWeb::on_pushButton_clicked()
{

QString qurl = ui->lineEdit->text();//获取输入的url地址

if(ui->lineEdit->text() != "") 

{

manager->get(QNetworkRequest(QUrl(qurl)));//发出请求

}

else

{

QMessageBox::warning(this,QString::fromLocal8Bit("警告对话框"),

QString::fromLocal8Bit("请输入Url地址"),QMessageBox::Abort);

}
        
           网页预览功能已经实现,下面实现下载功能
    4,①在BrowseWeb.h中添加头文件以及类的前置声明  

#include <QUrl>


class QFile;
       ②添加私有槽    

void httpReadyRead();//http准备读取数据

void updateDataReadProgress(qint64,qint64);//更新进度条

void httpFinished();//http完成
      ③添加一个公有成员

void startRequest(QUrl url);//开始请求

void imgPathToHtml(QString &path);//设置widget背景图片
      ④添加私有数据成员

QNetworkReply *reply;

QUrl url;

QFile *file;
     ⑤在构造函数中添加
/*-------------------widget背景--------------------*/

this->setAutoFillBackground(true);

QPalette palette;

palette.setBrush(QPalette::Background,QBrush(QPixmap(":/image/image/back.jpg")));//资源文件夹目录

this->setPalette(palette);
/*------------------------------------------------*/

ui->progressBar->hide();//在刚开始无需要下载的时候隐藏进度条
    ⑥实现函数的定义
void BrowseWeb::startRequest(QUrl url)//开始请求
{

reply = manager->get(QNetworkRequest(url));


//每当有新的数据可以读取的时都会发送readyRead()信号

connect(reply,SIGNAL(readyRead()),

this,SLOT(httpReadyRead()));

//每当网络请求的下载进度更新时都会发送downloadProgress()信号

connect(reply,SIGNAL(downloadProgress(qint64,qint64)),

this,SLOT(updateDataReadProgress(qint64,qint64)));

//每当应答处理结束时都会发送finished()信号

connect(reply,SIGNAL(finished()),

this,SLOT(httpFinished()));
}
void BrowseWeb::httpReadyRead()
{

//判断是否创建了文件,是的话将读回来的数据写入到文件中

if(file)

file->write(reply->readAll());
}

void BrowseWeb::httpReadyRead()
{

//判断是否创建了文件,是的话将读回来的数据写入到文件中

if(file)

file->write(reply->readAll());
}

void BrowseWeb::updateDataReadProgress(qint64 bytesRead, qint64 totalBytes)
{

//设置最大值和当前值

ui->progressBar->setMaximum(totalBytes);

ui->progressBar->setValue(bytesRead);
}

void BrowseWeb::httpFinished()
{

//完成下载后将进度条隐藏,将缓冲数据刷新到文件中,

//然后删除掉file和reply的对象

ui->progressBar->hide();

file->flush();

file->close();

reply->deleteLater();

reply = 0;

delete file;

file = 0;
}

void BrowseWeb::on_pushButton_2_clicked()//下载按钮
{

url = ui->lineEdit->text();

QFileInfo info(url.path());

QString fileName(info.fileName());

file = new QFile(fileName);


if(!file->open(QIODevice::WriteOnly))

{

qDebug()<<"file open error!";

delete file;

file = 0;

return;

}

startRequest(url);

ui->progressBar->setValue(0);

ui->progressBar->show();
}

void BrowseWeb::imgPathToHtml(QString &path)//设置背景图片

{

path = QString("<img src="%1"/>").arg(path);

}

/*---------------------推荐下载实现-----------------------*/
void BrowseWeb::on_pushButton_qq_clicked()
{

ui->textBrowser->clear();

ui->lineEdit->setText("http://dldir1.qq.com/qqfile/qq/QQ8.9.1/20453/QQ8.9.1.exe");

QString imgPath = QString(":/image/image/qq.jpg");

imgPathToHtml(imgPath);

ui->textBrowser->insertHtml(imgPath);
}

void BrowseWeb::on_pushButton_360_clicked()
{

ui->textBrowser->clear();

ui->lineEdit->setText("http://221.204.7.214/softdl.360tpcdn.com/se8/360se8.1.1.248.exe");

QString imgPath = QString(":/image/image/360.jpg");

imgPathToHtml(imgPath);

ui->textBrowser->insertHtml(imgPath);
}

void BrowseWeb::on_pushButton_aqy_clicked()
{

ui->textBrowser->clear();

ui->lineEdit->setText("http://221.204.7.210/softdl.360tpcdn.com/QIYImedia/QIYImedia_5.5.33.3550_opensoft_1221.exe");

QString imgPath = QString(":/image/image/aqy.jpg");

imgPathToHtml(imgPath);

ui->textBrowser->insertHtml(imgPath);
}

void BrowseWeb::on_pushButton_wps_clicked()
{

ui->textBrowser->clear();

ui->lineEdit->setText("http://221.204.197.13/big.softdl.360tpcdn.com/WPSOffice/WPSOffice_10.1.0.6260_opensoft.exe");

QString imgPath = QString(":/image/image/wps.jpg");

imgPathToHtml(imgPath);

ui->textBrowser->insertHtml(imgPath);
}
/*------------------------------------------------------*/

最后

以上就是复杂小蝴蝶为你收集整理的QT—下载器的实现的全部内容,希望文章能够帮你解决QT—下载器的实现所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(65)

评论列表共有 0 条评论

立即
投稿
返回
顶部