概述
【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网络编程简介一、QT网络编程简介二、快速实践的全部内容,希望文章能够帮你解决【QT】QT网络编程简介一、QT网络编程简介二、快速实践所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复