Qt网络之HTTP编程(2)

栏目: 编程工具 · 发布时间: 6年前

内容简介:Qt网络之HTTP编程(2)

二、功能扩展

通过上面的例子可以看到,Qt中编写基于HTTP协议的程序是十分简单的,只有十几行代码。不过,一般我们下载文件都想要看到下载进度。下面我们就更改上面的程序,让它可以下载任意的文件,并且显示下载进度。

1.我们更改widget.ui文件如下图。

Qt网络之HTTP编程(2)

这里我们添加了一个Line Edit ,一个Label ,一个Progress Bar 和一个Push Button ,它们的熟悉保持默认即可。我们在Push Button上点击鼠标右键,选择Go to slot ,然后选择clicked() ,进入其单击事件槽函数,现在我们先不写代码。

在写代码之前,我们先介绍一下整个程序执行的流程:

开始我们先让进度条隐藏。当我们在Line Edit中输入下载地址,点击下载按钮后,我们应用输入的下载地址,获得文件名,在磁盘上新建一个文件,用于保存下载的数据,然后进行链接,并显示进度条。在下载过程中,我们将每次获得的数据都写入文件中,并更新进度条,在接收完文件后,我们重新隐藏进度条,并做一些清理工作。

根据这个思路,我们开始代码的编写。

2.我们在widget.h文件中添加代码,完成后其部分内容如下。

class Widget : public QWidget {  
    Q_OBJECT  
public:  
    Widget(QWidget *parent = 0);  
    ~Widget();  
    void startRequest(QUrl url); //请求链接  
protected:  
    void changeEvent(QEvent *e);  
private:  
    Ui::Widget *ui;  
    QNetworkAccessManager *manager;  
    QNetworkReply *reply;  
    QUrl url;   //存储网络地址  
    QFile *file;  //文件指针  
private slots:  
    void on_pushButton_clicked();  //下载按钮的单击事件槽函数  
    void httpFinished();  //完成下载后的处理  
    void httpReadyRead();  //接收到数据时的处理  
    void updateDataReadProgress(qint64,qint64); //更新进度条  
}; 

Qt网络之HTTP编程(2)

3.widget.cpp文件中的相关内容如下。

(1)构造函数中:

manager = new QNetworkAccessManager(this);   
ui->progressBar->hide(); 

Qt网络之HTTP编程(2)

我们在构造函数中先隐藏进度条。等开始下载时再显示它。

(2)下载按钮的单击事件槽函数。

void Widget::on_pushButton_clicked()  //下载按钮  
{  
    url = ui->lineEdit->text();  
 //获取在界面中输入的url地址,如: http://zz.onlinedown.net/down/laolafangkuaijin.rar  
    QFileInfo info(url.path());  
    QString fileName(info.fileName());  
    //获取文件名  
    if (fileName.isEmpty()) fileName = “index.html”;  
//如果文件名为空,则使用“index.html”,  
//例如使用“http://www.yafeilinux.com”时,文件名就为空  
    file = new QFile(fileName);  
    if(!file->open(QIODevice::WriteOnly))  
    {   //如果打开文件失败,则删除file,并使file指针为0,然后返回  
        qDebug() << “file open error”;  
        delete file;  
        file = 0;  
        return;  
    }  
    startRequest(url);  //进行链接请求  
    ui->progressBar->setValue(0);  //进度条的值设为0  
    ui->progressBar->show();  //显示进度条  
} 

Qt网络之HTTP编程(2)

这里我们先从界面中获取输入的地址,然后分解出文件名。因为地址中可能没有文件名,这时我们就使用一个默认的文件名。然后我们用这个文件名新建一个文件,这个文件会保存到工程文件夹的debug文件夹下。下面我们打开文件,然后进行链接,并显示进度条。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

算法技术手册

算法技术手册

[美]海涅曼 (Heineman.G.T.)、[美]波利切 (Pollice.G.)、[美]塞克欧 (Selkow.S.) / 东南大学出版社 / 2009-4 / 58.00元

创造稳定的软件需要有效的算法,但是程序设计者们很少能在问题出现之前就想到。《算法技术手册(影印版)》描述了现有的可以解决多种问题的算法,并且能够帮助你根据需求选择并实现正确的算法——只需要一定的数学知识即可理解并分析算法执行。相对于理论来说,本书更注重实际运用,书中提供了多种程序语言中可用的有效代码解决方案,可轻而易举地适合一个特定的项目。有了这本书,你可以: 解决特定编码问题或改进现有解决......一起来看看 《算法技术手册》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具