关于Http编程一些总结

Http即超文本传输协议,之前qt3中是QHttp类 但是qt4已经用QNetworkAccessManager类进行替代了

QNetworkAccessManager类进行网络请求与接受回复,具体是用QNetworkRequest类来管理请求,QNetworkReply类进行接受回复,并对数据进行处理 比如:

QNetworkAccessManager *manger;

manager = new QNetworkAccessManager(this);  //新建QNetworkAccessManager对象

connect(manager,SIGNAL(finished(QNetworkReply*)),  //关联信号和槽

            this,SLOT(replyFinished(QNetworkReply*)));

manager->get(QNetworkRequest(QUrl(“http://www.baidu.com”))); //发送请求

在replyFinished槽函数中我们可以获取相应的网页文本信息。

 

在下载文件的时候 如果需要看到文件的下载进度 也是可以实现的 比如:

QNetworkReply *reply;

QFile *file;

QUrl url;

url="http://www.xxx.com/hhh.zip";

file = new QFile("hhh.zip");

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

connect(reply,SIGNAL(finished()),this,SLOT(httpFinished()));

connect(reply,SIGNAL(readyRead()),this,SLOT(httpReadyRead()));

connect(reply,SIGNAL(downloadProgress(qint64,qint64)),this,SLOT(updateDataReadProgress(qint64,qint64)));
...
...
void Widget::httpReadyRead()

{

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

}

 

void Widget::updateDataReadProgress(qint64 bytesRead, qint64 totalBytes)

{

    ui->progressBar->setMaximum(totalBytes); //最大值

    ui->progressBar->setValue(bytesRead);  //当前值

}

大体上就是这个思路,就应该可以看到进度条了

这里面有两个细节问题:

1:file = new QFile("hhh.zip");

其实需要判断下file文件是否可读写 最好加上这个判断

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

    {   //如果打开文件失败,则删除file,并使file指针为0,然后返回

        qDebug() << "file open error";

        delete file;

        file = 0;

        return;

    }

2:在下载完成下载之后进行的一些善后操作

void Widget::httpFinished()  //完成下载

{

    file->flush();

    file->close();

    reply->deleteLater();

    reply = 0;

    delete file;

    file = 0;

}

这样关于Http下载就基本算作完成了,以上是借助参考资料:http://www.yafeilinux.com/?p=734 做的一些小笔记。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值