qt网络访问

来源:互联网 发布:xp电脑网络起动慢 编辑:程序博客网 时间:2024/06/05 00:44

准备工作:

1.      在pro文件中添加网络访问模块:QT +=network;

2.      如果要用到lambda表达式,则要在pro文件中添加QMAKE_CXXFLAGS+=-std=c++0x

 

基础类:

         QNetworkAccessManager:

这个类为Qt访问网络提供了API接口,几乎所有的网络访问都是围绕这个类展开。一个应用程序只要创建一个这样的实例即可。这个实例包含着发送请求的一些通用配置和设置

        

         QNetworkRequest:

这个类包含了要访问的网络节点的信息。包括url,以及服务器的相关地址。QNetworkAccessManager通过调用子函数get(QNetworkRequest  rqt);获取request中的信息。并向网络发送一个请求信息。并且每一个请求返回一个QNetworkReply对象。

 

         QNetworkReply:

这个类承载了网络的返回信息。QNetworkAccessManager发出请求信息,网络做出反应,接收到信息后,会触发finished信号,finished信号将返回的信息存储在QNetworkReply中,然后程序员可以通过解析这个reply获取信息。特别要注意的是通过readAll()访问数据只能访问一次,数据随后就会被清除

 

 

Qt的网络访问机制:

         Qt的网络访问是异步的,它的网络请求并不会打断主线程的运作。但是这个特点也要求我们需要主动去管理网络的反馈信息。常用的方法就是建立信号槽,将网络返回的信息放在槽函数中进行处理。

        

        

简单示例:访问某个网站获取天气信息,并在debug窗口中输出

 

    QNetworkAccessManager*manager=newQNetworkAccessManager(this);

    QNetworkRequestrequest;

 

    qDebug()<<"testbegin";

    connect(manager,&QNetworkAccessManager::finished,[=](QNetworkReply*reply_temp){

       qDebug()<<reply_temp;

       qDebug()<<reply_temp->readAll();

       reply_temp->deleteLater();

    });

 

    request.setUrl(QUrl("http://api.openweathermap.org/data/2.5/weather?q=Beijing,cn&mode=json&units=metric&lang=zh_cn"));

    QNetworkReply *reply=manager->get(request);