精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Qt網絡之HTTP編程

移動開發
本文章介紹如何利用HTTP從網站上下載文件。在Qt網絡編程中,需要用到協議,即HTTP。它是超文本傳輸協議,它是一種文件傳輸協議。對于HTTP就不多解釋了。

Qt網絡編程中,需要用到協議,即HTTP。它是超文本傳輸協議,它是一種文件傳輸協議。這一節中我們將講解如何利用HTTP從網站上下載文件。使用的編程環境為Windows下基于Qt 4.6.3的Qt Creator 1.3.1

一、最簡單的實現。

1.我們新建Qt 4 Gui QApplication 。

工程名為“http”,然后選中QtNetwork模塊,最后Base class選擇QWidget 。注意:如果新建工程時沒有添加Qt Network模塊,那么就要手動在工程文件.pro中添加代碼

  1. QT += network  

表明我們使用了網絡模塊。

2.我們在widget.ui文件中添加一個 Text Browser ,如下圖。

Qt網絡之HTTP編程

3..在widget.h中我們添加代碼。

添加頭文件:#include <QtNetwork>

私有變量private中:QNetworkAccessManager *manager;

私有槽函數private slots 中:void replyFinished(QNetworkReply *);

4.在widget.cpp文件中添加代碼。

在構造函數中添加如下代碼:

  1. manager = new QNetworkAccessManager(this);  //新建QNetworkAccessManager對象  
  2. connect(manager,SIGNAL(finished(QNetworkReply*)),  //關聯信號和槽  
  3.             this,SLOT(replyFinished(QNetworkReply*)));  
  4. manager->get(QNetworkRequest(QUrl(“http://www.yafeilinux.com”))); //發送請求 

然后定義函數:

  1. void Widget::replyFinished(QNetworkReply *reply)  //當回復結束后  
  2. {  
  3.     QTextCodec *codec = QTextCodec::codecForName(“utf8″);  
  4.     //使用utf8編碼,這樣才可以顯示中文  
  5.     QString all = codec->toUnicode(reply->readAll());  
  6.     ui->textBrowser->setText(all);  
  7.     reply->deleteLater();   //最后要釋放reply對象  

5.運行效果如下。

Qt網絡之HTTP編程

6.代碼分析。

上面實現了最簡單的應用HTTP協議下載網頁的程序。QNetworkAccessManager類用于發送網絡請求和接受回復,具體的,它是用QNetworkRequest 類來管理請求,QNetworkReply類進行接收回復,并對數據進行處理。

在上面的代碼中,我們使用了下面的代碼來發送請求:

  1. manager->get(QNetworkRequest(QUrl(“http://www.yafeilinux.com”))); 

它返回一個QNetworkReply對象,這個下面再講。我們只需知道只要發送請求成功,它就會下載數據。而當數據下載完成后,manager會發出finished()信號,我們對它進行了關聯:

  1. connect(manager,SIGNAL(finished(QNetworkReply*)),   
  2.             this,SLOT(replyFinished(QNetworkReply*))); 

也就是說,當下載數據結束時,就會執行replyFinished()函數。在這個函數中我們對接收的數據進行處理:

  1. QTextCodec *codec = QTextCodec::codecForName(“utf8″);  
  2. QString all = codec->toUnicode(reply->readAll());  
  3. ui->textBrowser->setText(all); 

這里,為了能顯示下載的網頁中的中文,我們使用了QTextCodec 類對象,應用utf8編碼。

使用reply->readAll()函數就可以將下載的所有數據讀出。然后,我們在textBrowser中將數據顯示出來。當reply對象已經完成了它的功能時,我們需要將它釋放,就是最后一條代碼:

  1. reply->deleteLater(); 

#p#

二、功能擴展

通過上面的例子可以看到,Qt中編寫基于HTTP協議的程序是十分簡單的,只有十幾行代碼。不過,一般我們下載文件都想要看到下載進度。下面我們就更改上面的程序,讓它可以下載任意的文件,并且顯示下載進度。

1.我們更改widget.ui文件如下圖。

Qt網絡之HTTP編程

這里我們添加了一個Line Edit ,一個Label ,一個Progress Bar 和一個Push Button ,它們的熟悉保持默認即可。我們在Push Button上點擊鼠標右鍵,選擇Go to slot ,然后選擇clicked() ,進入其單擊事件槽函數,現在我們先不寫代碼。

在寫代碼之前,我們先介紹一下整個程序執行的流程:

開始我們先讓進度條隱藏。當我們在Line Edit中輸入下載地址,點擊下載按鈕后,我們應用輸入的下載地址,獲得文件名,在磁盤上新建一個文件,用于保存下載的數據,然后進行鏈接,并顯示進度條。在下載過程中,我們將每次獲得的數據都寫入文件中,并更新進度條,在接收完文件后,我們重新隱藏進度條,并做一些清理工作。

根據這個思路,我們開始代碼的編寫。

2.我們在widget.h文件中添加代碼,完成后其部分內容如下。

  1. class Widget : public QWidget {  
  2.     Q_OBJECT  
  3. public:  
  4.     Widget(QWidget *parent = 0);  
  5.     ~Widget();  
  6.     void startRequest(QUrl url); //請求鏈接  
  7. protected:  
  8.     void changeEvent(QEvent *e);  
  9. private:  
  10.     Ui::Widget *ui;  
  11.     QNetworkAccessManager *manager;  
  12.     QNetworkReply *reply;  
  13.     QUrl url;   //存儲網絡地址  
  14.     QFile *file;  //文件指針  
  15. private slots:  
  16.     void on_pushButton_clicked();  //下載按鈕的單擊事件槽函數  
  17.     void httpFinished();  //完成下載后的處理  
  18.     void httpReadyRead();  //接收到數據時的處理  
  19.     void updateDataReadProgress(qint64,qint64); //更新進度條  
  20. }; 

Qt網絡之HTTP編程

3.widget.cpp文件中的相關內容如下。

(1)構造函數中:

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

Qt網絡之HTTP編程

我們在構造函數中先隱藏進度條。等開始下載時再顯示它。

(2)下載按鈕的單擊事件槽函數。

  1. void Widget::on_pushButton_clicked()  //下載按鈕  
  2. {  
  3.     url = ui->lineEdit->text();  
  4.  //獲取在界面中輸入的url地址,如: http://zz.onlinedown.net/down/laolafangkuaijin.rar  
  5.     QFileInfo info(url.path());  
  6.     QString fileName(info.fileName());  
  7.     //獲取文件名  
  8.     if (fileName.isEmpty()) fileName = “index.html”;  
  9. //如果文件名為空,則使用“index.html”,  
  10. //例如使用“http://www.yafeilinux.com”時,文件名就為空  
  11.     file = new QFile(fileName);  
  12.     if(!file->open(QIODevice::WriteOnly))  
  13.     {   //如果打開文件失敗,則刪除file,并使file指針為0,然后返回  
  14.         qDebug() << “file open error”;  
  15.         delete file;  
  16.         file = 0;  
  17.         return;  
  18.     }  
  19.     startRequest(url);  //進行鏈接請求  
  20.     ui->progressBar->setValue(0);  //進度條的值設為0  
  21.     ui->progressBar->show();  //顯示進度條  

Qt網絡之HTTP編程

這里我們先從界面中獲取輸入的地址,然后分解出文件名。因為地址中可能沒有文件名,這時我們就使用一個默認的文件名。然后我們用這個文件名新建一個文件,這個文件會保存到工程文件夾的debug文件夾下。下面我們打開文件,然后進行鏈接,并顯示進度條。

#p#

(3)鏈接請求函數。

  1. void Widget::startRequest(QUrl url)  //鏈接請求  
  2. {  
  3.     reply = manager->get(QNetworkRequest(url));  
  4.     //下面關聯信號和槽  
  5.     connect(reply,SIGNAL(finished()),this,SLOT(httpFinished()));  
  6.     //下載完成后  
  7.     connect(reply,SIGNAL(readyRead()),this,SLOT(httpReadyRead()));  
  8.     //有可用數據時  
  9.     connect(reply,SIGNAL(downloadProgress(qint64,qint64)),  
  10.             this,SLOT(updateDataReadProgress(qint64,qint64)));  
  11.     //更新進度條  

Qt網絡之HTTP編程

在上一個例子中我們就提到了manager->get(QNetworkRequest(url)),返回的是一個QNetworkReply對象,這里我們獲得這個對象,使用它完成顯示數據下載進度的功能。這里主要是關聯了幾個信號和槽。當有可用數據時,reply就會發出readyRead()信號,我們這時就可以將可用的數據保存下來。就是在這里,實現了數據分段下載保存,這樣比下載完所有數據再保存,要節省很多內存。而利用reply的downloadProgress()信號,很容易就實現了進度條的顯示 。

(4)保存數據函數。

  1. void Widget::httpReadyRead()   //有可用數據  
  2. {  
  3.     if (file) file->write(reply->readAll());  //如果文件存在,則寫入文件  

Qt網絡之HTTP編程

這里當file可用時,將下載的數據寫入文件。

(5)更新進度條函數。

  1. void Widget::updateDataReadProgress(qint64 bytesRead, qint64 totalBytes)  
  2.  {  
  3.     ui->progressBar->setMaximum(totalBytes); //最大值  
  4.     ui->progressBar->setValue(bytesRead);  //當前值  

每當有數據到來時,都更新進度條。

(6)完成下載。

 

  1. void Widget::httpFinished()  //完成下載  
  2. {  
  3.     ui->progressBar->hide();  
  4.     file->flush();  
  5.     file->close();  
  6.     reply->deleteLater();  
  7.     reply = 0;  
  8.     delete file;  
  9.     file = 0;  

Qt網絡之HTTP編程

這里只是當下載完成后,進行一些處理。

4.我們運行程序,效果如下。

下載網頁文件:

Qt網絡之HTTP編程

下載華軍軟件園上的勞拉方塊游戲:

Qt網絡之HTTP編程 

 

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

Qt網絡之HTTP編程

我們HTTP應用的內容就講到這里,可以看到它是很容易的,也不需要你了解太多的HTTP的原理知識。關于相關的類的其他使用,你可以查看其幫助。

【編輯推薦】

Qt/E服務器客戶端架構

IP網絡攻擊及安全防護淺析

Qt網絡之獲取本機網絡信息

Qt 平臺中使GUI保持響應流暢

測試自動化 淺談QTP腳本的重用

開源軟件是基于JVM 平臺之Qt移植QtJambi

責任編輯:zhaolei 來源: 互聯網
相關推薦

2011-06-10 12:17:52

Qt 網絡

2011-06-27 09:02:18

Qt UDP 網絡

2011-06-27 09:47:43

2011-06-27 10:28:45

Qt 網絡 TCP

2011-06-27 10:15:22

Qt 網絡 TCP

2009-08-03 11:21:47

ASP.NET編程模型

2011-06-22 16:18:23

QT 多線程 QSocket

2012-09-24 14:09:31

C#網絡協議C

2011-06-22 10:12:08

Qt 線程

2019-02-12 15:04:09

2011-06-23 11:16:39

Qt Excel

2011-06-22 09:40:32

QT 模板庫 模板

2011-06-10 13:21:00

Qt 網絡

2021-04-26 10:32:38

網絡安全PE編程工具

2015-05-28 10:47:38

Unix網絡編程TCP

2021-04-30 18:50:44

網絡安全PE編程添加節區

2024-04-23 13:36:00

2016-10-10 00:18:27

2011-06-24 15:30:22

QT 皮膚 QSS

2011-06-13 16:51:19

Qt Socket
點贊
收藏

51CTO技術棧公眾號

亚洲国产精品网站| 五月激情综合色| 91九色在线观看| 91九色丨porny丨肉丝| 精品国产精品| 精品久久99ma| 欧美婷婷精品激情| missav|免费高清av在线看| 久久天天做天天爱综合色| 亚洲专区在线视频| 国产美女www| 国产专区一区| 亚洲女人天堂成人av在线| 亚洲第一区第二区第三区| 91精品国产黑色瑜伽裤| 国产精品日日摸夜夜摸av| 国产精品一区二区欧美| 亚洲一区二区激情| 久久婷婷一区| 高清欧美一区二区三区| 一本一本久久a久久| 西野翔中文久久精品国产| 日韩西西人体444www| 91香蕉视频导航| 原纱央莉成人av片| 亚洲中国最大av网站| 一区二区三区电影| 第九色区av在线| 91片在线免费观看| 国产精品视频一区二区三区经| 中文字幕第三页| 国产精品嫩草99av在线| 欧美激情精品久久久久久黑人| www.xx日本| 国产免费久久| 亚洲天堂av综合网| 巨胸大乳www视频免费观看| 91夜夜蜜桃臀一区二区三区| 欧美精品日日鲁夜夜添| 啊啊啊国产视频| **欧美日韩在线观看| 午夜精品aaa| www.xxx麻豆| 人妖欧美1区| 亚洲欧美一区二区三区极速播放 | 欧美挤奶吃奶水xxxxx| 欧美一区二区三区日韩| 国产xxxxhd| 大胆国模一区二区三区| 欧美高清精品3d| 中文字幕在线视频精品| 在线观看欧美| 欧美一区二区在线播放| 小早川怜子一区二区三区| 久久精品资源| 欧美电影一区二区| 国模大尺度视频| 在这里有精品| 亚洲精品aⅴ中文字幕乱码| 91视频啊啊啊| 亚瑟一区二区三区四区| 精品伊人久久97| 国产ts在线播放| 日本a级不卡| 日韩在线免费视频| 国产盗摄x88av| 136国产福利精品导航网址| 羞羞色国产精品| 视频一区二区三区四区五区| 久久中文欧美| 国产日韩欧美成人| 精品人妻一区二区三区三区四区 | 国产真实乱人偷精品人妻| 精品精品99| 久久久999精品免费| 国产十六处破外女视频| 亚洲高清久久| 国产成人极品视频| 91黄色在线视频| 粉嫩av亚洲一区二区图片| 国产精品裸体一区二区三区| 欧美美女搞黄| 亚洲视频狠狠干| 日本www在线视频| 成人免费在线观看视频| 91精品国产入口在线| 亚洲av成人精品一区二区三区| 小说区图片区色综合区| 久久精品99久久香蕉国产色戒| 中文字幕影音先锋| 久久久精品网| 亚洲free性xxxx护士白浆| 人妻一区二区三区免费| 国产精品网站一区| 被灌满精子的波多野结衣| 经典三级一区二区| 欧美成人高清电影在线| 91精品人妻一区二区三区| 91精品国产自产在线观看永久∴| 欧美激情在线播放| 黄色大全在线观看| 成人中文字幕合集| 亚洲欧美日产图| 国产精品探花在线| 欧美人xxxx| 国产亚洲无码精品| 欧美精品aa| 国产精品久久久久福利| 蜜桃91麻豆精品一二三区| 国产日韩av一区二区| 香港三级日本三级a视频| 日本精品裸体写真集在线观看| 日韩欧美你懂的| 精品人妻中文无码av在线 | 亚洲狼人综合干| 99a精品视频在线观看| 最新国产成人av网站网址麻豆| 国产福利拍拍拍| 国产精品99久久久久久久vr| 天天综合色天天综合色hd| rebdb初裸写真在线观看| 91精品国产一区二区三区蜜臀| 91久久免费视频| 99pao成人国产永久免费视频| 91香蕉电影院| 夜级特黄日本大片_在线 | 欧美成人免费高清视频| 大奶在线精品| 久精品免费视频| 国产欧美综合视频 | 日韩国产精品亚洲а∨天堂免| 欧美在线视频第一页| 久久国产综合精品| 午夜精品福利一区二区| 成人在线爆射| 亚洲男人天堂手机在线| 国产精品人人人人| 99久久综合色| 成年人看的毛片| 国产成人一二片| 久久久久久12| 亚洲黄色小说网址| 一区二区三区影院| 伊人av在线播放| 国产精品vip| 国产精品手机视频| 69av成人| 日韩黄在线观看| 毛片视频网站在线观看| 久久夜色精品一区| 日av中文字幕| 日韩理论在线| 成人午夜在线观看| 羞羞网站在线免费观看| 日韩美女天天操| 久久久久久久久久久网| 国产精品18久久久久| 久久av高潮av| 豆花视频一区二区| 91国在线精品国内播放| 青梅竹马是消防员在线| 色欧美片视频在线观看在线视频| 国产精品一二三区在线观看| 青青草国产精品97视觉盛宴 | 黄色亚洲精品| 久久精品人人做人人爽电影| 深夜成人福利| 久久久精品国产| 丰满人妻一区二区三区四区53| 亚洲福利视频三区| 人人妻人人藻人人爽欧美一区| 日韩精品一级中文字幕精品视频免费观看 | 久热免费在线观看| 日韩欧美1区| 91久久精品www人人做人人爽| 国产盗摄一区二区| 亚洲欧美制服第一页| 在线免费一级片| 亚洲午夜精品网| caopeng视频| 国产一区二区三区不卡在线观看 | 日本大胆欧美人术艺术动态| 一区二区三区视频在线播放| 一区二区三区在线资源| 日韩av电影手机在线| 麻豆网在线观看| 亚洲成人激情在线| 中文字幕人妻精品一区| 亚洲综合丝袜美腿| 黄色aaa视频| 粉嫩高潮美女一区二区三区| 欧美三级午夜理伦三级| 真实国产乱子伦精品一区二区三区 | 免费黄色一级大片| 亚洲影视在线播放| 高清国产在线观看| 懂色av一区二区三区免费观看 | 91精品国产乱码在线观看| 国产午夜精品久久久久久久| 91人妻一区二区三区| 久久免费高清| 免费人成在线观看视频播放| 成人一区不卡| 精品国产乱码久久久久久久软件 | 日本成人在线不卡视频| 99国产精品白浆在线观看免费| 欧美肉体xxxx裸体137大胆| 国产精品12| 91麻豆精品| 国产精品高清在线观看| h片在线观看视频免费免费| 爱福利视频一区| 国产中文在线观看| 亚洲国产精品久久久久| 99久久精品日本一区二区免费| 色婷婷综合激情| 日韩aaaaaa| 一区二区三区在线不卡| 永久免费看mv网站入口| 国产欧美日韩在线看| 美国黄色a级片| av在线不卡网| 中文字幕一区二区三区人妻在线视频| 免费美女久久99| 黑森林福利视频导航| 一区二区精品| 黄色一级片在线看| 午夜亚洲福利| 日韩成人午夜影院| 999精品视频| 亚洲欧洲国产日韩精品| 国产亚洲第一伦理第一区| 好吊色欧美一区二区三区| 一区二区三区四区视频免费观看| 成人午夜小视频| 国模大尺度视频一区二区| 国产美女扒开尿口久久久| 国产成人a视频高清在线观看| 国产精国产精品| 澳门成人av网| 国产va免费精品高清在线| 色老太综合网| 国产精品7m视频| 香蕉成人影院| 国产欧美亚洲精品| 日韩电影精品| 成人激情av在线| aa亚洲一区一区三区| 91精品视频免费| 国产免费区一区二区三视频免费| 91久久国产精品91久久性色| 国产精品国产亚洲精品| 亚洲一区二区在线| 伊人精品综合| 好吊色欧美一区二区三区| 天美av一区二区三区久久| 欧美一区二区视频17c| 色综合综合色| 一区二区三区四区五区视频| 婷婷中文字幕一区| 992tv快乐视频| 激情综合网址| 99精品视频在线看| 蜜臀av性久久久久av蜜臀妖精| 欧美三级理论片| 国产做a爰片久久毛片| 极品人妻一区二区| 99免费精品视频| 天天操天天舔天天射| 亚洲精品日韩专区silk| 在线观看 中文字幕| 色综合色狠狠综合色| 中文字幕乱码无码人妻系列蜜桃| 9191久久久久久久久久久| www香蕉视频| 日韩精品中文字幕视频在线| 日韩在线资源| 欧美精品videofree1080p| 欧美大电影免费观看| 成人av.网址在线网站| 加勒比久久高清| 欧洲av一区| 欧美va天堂在线| 久久精品.com| 激情成人综合网| 在线精品一区二区三区| 国产精品电影院| 亚欧视频在线观看| 精品视频全国免费看| 精品人妻一区二区三区含羞草| 亚洲男人第一av网站| 麻豆网站在线观看| 欧美一级电影在线| 久久三级中文| 欧美人与物videos另类| 一个色综合网| 亚洲福利精品视频| 成人精品一区二区三区四区| 免费看黄色的视频| 亚洲国产日韩综合久久精品| 进去里视频在线观看| 亚洲第一页自拍| 黄色免费网站在线| 日本中文字幕久久看| 亚洲一区二区三区在线免费| 手机在线观看国产精品| 亚洲国产高清视频| 久久精品国产露脸对白| 久久精品免视看| 国产一级免费观看| 7777精品伊人久久久大香线蕉超级流畅 | 亚洲欧美另类人妖| 色呦呦呦在线观看| 国产美女精品视频| 欧美男gay| 日本午夜激情视频| 国产成人激情av| 欧美一区二区三区观看| 日本道免费精品一区二区三区| 成人免费视频国产| 久久精品国产96久久久香蕉| 日韩精品专区| 国内精品二区| 欧美日韩理论| 日韩久久久久久久久久久| 国产精品久久久久影视| chinese国产精品| 亚洲精品国产精品自产a区红杏吧| 国产激情在线观看| 国产精品视频免费在线| 国产99久久久国产精品成人免费 | 日韩在线免费| 久久久久国产精品视频| 亚洲国产午夜| 娇妻高潮浓精白浆xxⅹ| 亚洲乱码中文字幕| 国产伦理一区二区| 久久久国产精品视频| 亚洲精品aaa| 国产精品夜夜夜爽张柏芝| 久久99精品一区二区三区三区| 伊人影院综合网| 欧美三区免费完整视频在线观看| 国产在线视频网| 国产精品99久久99久久久二8| 国产最新精品| 99久久国产宗和精品1上映| 久久久无码精品亚洲日韩按摩| 欧美男人亚洲天堂| 亚洲香蕉伊综合在人在线视看 | 麻豆亚洲精品| 成年人网站免费看| 一本到高清视频免费精品| 国产毛片av在线| 国产精品久久久久久亚洲调教| 欧美日韩国产传媒| 91女神在线观看| 亚洲欧美综合另类在线卡通| 国产精品污视频| 国内精品一区二区三区四区| 国语一区二区三区| 国产精品97在线| 中文字幕av在线一区二区三区| 亚洲天堂手机版| 欧美日韩成人网| 美国成人xxx| 男人女人黄一级| 亚洲三级在线播放| 欧美一级片免费| 欧美一区二区三区……| 欧美久久综合网| 欧美在线a视频| 午夜精品爽啪视频| 免费一级在线观看| 91久久精品视频| 亚洲黄页一区| 蜜臀久久99精品久久久久久| 91精品国产综合久久国产大片| av电影免费在线看| 色姑娘综合网| 懂色av中文字幕一区二区三区 | www在线看| 日韩欧美视频一区二区三区四区| 经典一区二区三区| 国产欧美日韩另类| 中文国产亚洲喷潮| 91成人精品在线| 免费看污污网站| 亚洲国产一区二区在线播放| 国产一级片在线| 国产精品一区在线观看| 男人的天堂亚洲一区| 国产一卡二卡在线播放| 亚洲视频在线免费观看| 日韩三级久久| 免费看a级黄色片| 亚洲不卡在线观看| 九七久久人人| 日本一区二区不卡高清更新| 国产精品69毛片高清亚洲|