日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

【QT】QT网络编程简介

發布時間:2023/12/9 c/c++ 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【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. 網絡體系

    一個通用的網絡體系大概步驟如下

  • 通過管理類創建一個管理器
  • 通過QUrl確認鏈接和其它請求信息
  • 通過QNetworkRequest進行請求操作
  • 通過管理類發送請求并關聯接收
  • 處理接收
  • 3. 一個GET所需要的組件

  • 通常一個GET請求需要QUrl進行構建請求鏈接
  • 通過Request來封裝請求
  • 通過管理類發送請求
  • 通過Reply處理相應
  • 二、快速實踐

    案例一:創建一個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函數封裝流程

  • const char* 封裝為QUrl
  • QUrl封裝為QNetworkRequest
  • QNetworkRequest作為get參數發送
  • 案例二:中文編碼問題

    QTextCodec *codec = QTextCodec::codecForName("utf8"); QString all = codec->toUnicode(reply->readAll());

    因為reply對象返回的是字節序,字節數組,是完全按照http返回的二進制數據
    因此如果想要得到中文或者其他形式的編碼,則需要進行二次編碼
    使用QTextCodec進行編碼
    編碼結果得到的是QString

    總結

    以上是生活随笔為你收集整理的【QT】QT网络编程简介的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。