【QT】QT网络编程简介
生活随笔
收集整理的這篇文章主要介紹了
【QT】QT网络编程简介
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【QT】QT網絡編程簡介
- 一、QT網絡編程簡介
- 1. 重要的類
- 2. 網絡體系
- 3. 一個GET所需要的組件
- 二、快速實踐
- 案例一:創建一個GET請求
- 1. 在類內部定義網絡編程所需的類
- 2. new一個QNetworkAccessManager類
- 3. 將Manager的finish信號和接受槽相關聯
- 4. 編寫接收槽函數
- 5. 發送請求
- 6. 注銷資源
- #:一個tip
- #:GET函數封裝流程
- 案例二:中文編碼問題
一、QT網絡編程簡介
QT自身有著完善的網絡管理體系,既支持底層協議,也支撐上層封裝。
本文介紹三個常用類和實踐代碼
1. 重要的類
QNetworkAccessManager 網絡接入管理類,使用該管理類可以方便管理網絡請求等
QNetworkRequest 請求類,用于發送網絡請求
QNetworkReply 相應類,用于處理相應信息
2. 網絡體系
一個通用的網絡體系大概步驟如下
3. 一個GET所需要的組件
二、快速實踐
案例一:創建一個GET請求
1. 在類內部定義網絡編程所需的類
private:QNetworkAccessManager* manager; QNetworkReply* reply; private slots:void finishSlot(QNetworkReply*reply);QNetworkAccessManager是管理類
QNetworkReply是相應類
finishSlot是接收相應的槽
2. new一個QNetworkAccessManager類
MainWindow::manager = new QNetworkAccessManager(this);3. 將Manager的finish信號和接受槽相關聯
connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(finishSlot(QNetworkReply*)));4. 編寫接收槽函數
void MainWindow::finishSlot(QNetworkReply *reply) {ui->strLab->setText("This is a text");QTextCodec *codec = QTextCodec::codecForName("utf8");QString all = codec->toUnicode(reply->readAll());ui->strLab->setText(all); }5. 發送請求
manager->get(QNetworkRequest(QUrl("http://localhost:8080/")));6. 注銷資源
reply->deleteLater();不同于new運算符的是,QT使用了智能銷毀的函數deleteLater,這個函數會自動判斷合適的時機將資源銷毀。
QT有著較為優秀的內存回收機制,當對象數量有對象樹結構化的支持時,相關對象會按照對象樹的規則自動銷毀,避免了內存溢出的情況。
不過QT在內存管理方面需要編者著重注意內存問題,例如越界檢查和野指針。
#:一個tip
當你的QT內存管理出現問題時往往會和當前系統其它使用QT編寫的應用程序發生沖突,尤其是Windows平臺下的一系列第三方服務。
經驗來講,野指針和內存越界的問題是引起藍屏的主要根源。有時也會引起搜狗輸入法的程序沖突。
#:GET函數封裝流程
案例二:中文編碼問題
QTextCodec *codec = QTextCodec::codecForName("utf8"); QString all = codec->toUnicode(reply->readAll());因為reply對象返回的是字節序,字節數組,是完全按照http返回的二進制數據
因此如果想要得到中文或者其他形式的編碼,則需要進行二次編碼
使用QTextCodec進行編碼
編碼結果得到的是QString
總結
以上是生活随笔為你收集整理的【QT】QT网络编程简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 厉害了!Intel第九代酷睿参数曝光
- 下一篇: 【mybatis】mybatis多表联查