QT网络应用——获取网页数据

我们在浏览器中输入一个网址,然后在网页中就会显示出这个网页中的内容。
试想那在QT应用中如何访问这个网页,并获取到网页数据呢?

从网页中获取数据,需要用到的三个类:

功能介绍
QNetworkAccessManager用于协调网络操作,每当一个请求创建后,用该类来调度它,并发射信号报告进度。
QNetworkRequest是一个抽象的类(定义对象的时候要用指针),用来对网页进行请求,作为与请求有关的信息的统一容器,在创建请求对象时,通过指定URL来决定请求的网页(隐藏包含了请求的协议),目前支持HTTP、FTP、本地文件URLs的上传和下载。
QNetworkReply对于网络请求的应答使用该类;当请求被完成调度时,由QNetworkAccessManager类创建

1、程序编写流程

1、通过QNetworkRequest 类,创建一个网络请求对象,并为这个请求设置一个网址。

QNetworkRequest networkRequest(QUrl("http://whois.pconline.com.cn/ipJson.jsp"));      //指定请求的网址(可以获取到当前电脑IP地址的归属地),可以在创建对象的时候进行赋值操作

2、通过QNetworkAccessManage 类的get方法,可以将这个网页请求发送给服务器,并接收服务器发送的回复信息。接收完回复信息会释放finished信号。

QNetworkReply networkReply = networkAccessManager->get(networkRequest);      //进行网络请求,会返回一个回复,服务器回复结束,QnetworkReply就会释放finished信号

4、对finished信号绑定一个槽函数,并在这个槽函数中,通过QNetworkReply类下的readAll()方法,就可以接收服务器发送回来的全部网页数据了。

connect(networkReply,SIGNAL(finished()),this,SLOT(finished_slot()));    //回复结束的时候QnetworkReply会释放finished信号

void Widget::finished_slot()
{
QNetworkReply *reply = (QNetworkReply *) sender();//sender()函数作用就是得到一个指针,这个指针是:当前槽函数所对应的信号是哪个对象发送的
QByteArray data1 = reply->readAll();   //读取传回来的JSON数据

reply->deleteLater();       //记得释放内存
}

注意:如果想把获取到的JSON数据打印出来看看,直接就放在打印语句中是不行的(中文会乱码),需要转化数据的编码形式。因为网页传回来的数据编码形式不是Unicode形式,而QT默认的编码时Unicode形式,所以要转化为Unicode形式后QT才能正确处理。

  • 2
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

掏一淘哆啦A梦的奇妙口袋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值