社区新版论坛已上线,点击立即前往!使用 openKylin 账户授权登录,解锁更多体验!

openKylin论坛

 找回密码

Qt网络之HTTP编程(3) [复制链接]

(3)链接请求函数。
  • void Widget::startRequest(QUrl url)  //链接请求  
  • {  
  •     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)));  
  •     //更新进度条  
  • }

在上一个例子中我们就提到了manager->get(QNetworkRequest(url)),返回的是一个QNetworkReply对象,这里我们获得这个对象,使用它完成显示数据下载进度的功能。这里主要是关联了几个信号和槽。当有可用数据时,reply就会发出readyRead()信号,我们这时就可以将可用的数据保存下来。就是在这里,实现了数据分段下载保存,这样比下载完所有数据再保存,要节省很多内存。而利用reply的downloadProgress()信号,很容易就实现了进度条的显示 。
(4)保存数据函数。
  • void Widget::httpReadyRead()   //有可用数据  
  • {  
  •     if (file) file->write(reply->readAll());  //如果文件存在,则写入文件  
  • }

这里当file可用时,将下载的数据写入文件。
(5)更新进度条函数。
  • void Widget::updateDataReadProgress(qint64 bytesRead, qint64 totalBytes)  
  • {  
  •     ui->progressBar->setMaximum(totalBytes); //最大值  
  •     ui->progressBar->setValue(bytesRead);  //当前值  
  • }

每当有数据到来时,都更新进度条。
(6)完成下载。
  • void Widget::httpFinished()  //完成下载  
  • {  
  •     ui->progressBar->hide();  
  •     file->flush();  
  •     file->close();  
  •     reply->deleteLater();  
  •     reply = 0;  
  •     delete file;  
  •     file = 0;  
  • }

这里只是当下载完成后,进行一些处理。
4.我们运行程序,效果如下。
下载网页文件:

下载华军软件园上的劳拉方块游戏:

下载完成后可以看到工程文件夹中debug文件夹中的下载的文件。

我们HTTP应用的内容就讲到这里,可以看到它是很容易的,也不需要你了解太多的HTTP的原理知识。关于相关的类的其他使用,你可以查看其帮助。

楼主
发表于 2013-11-14 21:45:03
回复

使用道具 举报

Qt网络之HTTP编程(3) [复制链接]

koolar 发表于 2013-11-15 20:32
能不能请教您,怎么读写Qt-list-View和Colium-View,添加和删除行,谢谢。

 QStringListModel *model = new QStringListModel(user);
  userList->setModel(model);        //useList是个QListView
  user += "third";
  model->setStringList(user);

      model->removeRows(0,model->rowCount());//从第0行开始,删除所有行
      model->removeRows(0,2);//从第0行开始,删除前2行
你试试..
沙发
 楼主| 发表于 2013-11-16 21:31:41
回复

使用道具 举报

openKylin

GMT+8, 2024-7-5 10:42 , Processed in 0.018362 second(s), 17 queries , Gzip On.

Copyright ©2022 openKylin. All Rights Reserved .

ICP No. 15002470-12 Tianjin

快速回复 返回顶部 返回列表