当前位置:   article > 正文

【QT】QT网络编程简介_qt 网络

qt 网络

一、QT网络编程简介

QT自身有着完善的网络管理体系,既支持底层协议,也支撑上层封装。
本文介绍三个常用类和实践代码

1. 重要的类

  1. 管理类
    QNetworkAccessManager 网络接入管理类,使用该管理类可以方便管理网络请求等
  2. 请求类
    QNetworkRequest 请求类,用于发送网络请求
  3. 相应类
    QNetworkReply 相应类,用于处理相应信息

2. 网络体系

一个通用的网络体系大概步骤如下

  1. 通过管理类创建一个管理器
  2. 通过QUrl确认链接和其它请求信息
  3. 通过QNetworkRequest进行请求操作
  4. 通过管理类发送请求并关联接收
  5. 处理接收

3. 一个GET所需要的组件

  1. 通常一个GET请求需要QUrl进行构建请求链接
  2. 通过Request来封装请求
  3. 通过管理类发送请求
  4. 通过Reply处理相应

二、快速实践

案例一:创建一个GET请求

1. 在类内部定义网络编程所需的类

private:
    QNetworkAccessManager* manager;	
    QNetworkReply* reply;
private slots:
    void finishSlot(QNetworkReply*reply);
  • 1
  • 2
  • 3
  • 4
  • 5

QNetworkAccessManager是管理类
QNetworkReply是相应类
finishSlot是接收相应的槽

2. new一个QNetworkAccessManager类

 MainWindow::manager = new QNetworkAccessManager(this);
  • 1

3. 将Manager的finish信号和接受槽相关联

connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(finishSlot(QNetworkReply*)));
  • 1

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);
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

5. 发送请求

manager->get(QNetworkRequest(QUrl("http://localhost:8080/")));
  • 1

6. 注销资源

reply->deleteLater();
  • 1

不同于new运算符的是,QT使用了智能销毁的函数deleteLater,这个函数会自动判断合适的时机将资源销毁。
QT有着较为优秀的内存回收机制,当对象数量有对象树结构化的支持时,相关对象会按照对象树的规则自动销毁,避免了内存溢出的情况。
不过QT在内存管理方面需要编者着重注意内存问题,例如越界检查和野指针。

#:一个tip

当你的QT内存管理出现问题时往往会和当前系统其它使用QT编写的应用程序发生冲突,尤其是Windows平台下的一系列第三方服务。
经验来讲,野指针和内存越界的问题是引起蓝屏的主要根源。有时也会引起搜狗输入法的程序冲突。

#:GET函数封装流程

  1. const char* 封装为QUrl
  2. QUrl封装为QNetworkRequest
  3. QNetworkRequest作为get参数发送

案例二:中文编码问题

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

因为reply对象返回的是字节序,字节数组,是完全按照http返回的二进制数据
因此如果想要得到中文或者其他形式的编码,则需要进行二次编码
使用QTextCodec进行编码
编码结果得到的是QString

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/981775
推荐阅读
相关标签
  

闽ICP备14008679号