马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
需求分析:
要获取一个舆图,
须要ip
须要根据ip查询经纬度
根据经纬度查询舆图
别的一条线是根据输入的地点 查询ip 根据查询到的ip查舆图‘
末了,要渲染舆图
上面这这些动作,要举行http查询:
为此要有三个QNetworkAccessManager对象:
- QNetworkAccessManager *m_ipManager; // 用于ip管理
- QNetworkAccessManager *m_locManager; // 用于查询位置
- //网络管理对象 发送地图图片
- QNetworkAccessManager *m_mapManager; //查询地图
- //响应对象 接收地图图片
- QNetworkReply *m_mapReply=NULL; //响应
复制代码
全部的查询动作固然能序次实验:
如先查询ip
期待获取IP返回效果
假如IP返回了,发起根据IP查询经纬度的哀求
期待经纬度查询效果,假如得到的返回,则进一步根据返回的经纬度查询舆图数据
期待舆图数据查询效果,把效果写入文件
从文件中读取数据,渲染到weigt上
但是 假如此中某个环节网络断了 大概百度服务器宕机了,体系就会卡死。
按上面步调,网络哀求是同步序次,实验来的,用户界面大概会壅闭,用户体验欠佳。
为此我们引入槽函数机制!让网络哀求是异步举行,用户界面不会壅闭,这提供了更好的用户体验!
在构造函数中,添加如下代码:
- Form1::Form1(QWidget *parent)
- : QWidget(parent)
- , ui(new Ui::Form1)
- {
- ui->setupUi(this);
- //new一个网络管理对象
- m_ipManager = new QNetworkAccessManager(this); // net connection tool ,duty is to connect to the server
- //declare connect relationship ,when receive the response ,call the slot function,response is finished signal
- connect(m_ipManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(onGetIp(QNetworkReply*)));
- m_locManager=new QNetworkAccessManager(this); //net connection tool ,duty is to connect to the server for location
- //declare connect relationship ,when receive the response ,call the slot function,response is finished signal
- connect(m_locManager,SIGNAL(finished(QNetworkReply*)),this,SLOT(onGetCurrentLoc(QNetworkReply*)));
- m_mapManager=new QNetworkAccessManager(this); //net connection tool ,duty is to connect to the server for map query map
- connect(m_mapManager,SIGNAL(finished(QNetworkReply*)),this,SLOT(onSendMapRequest()));
- }
复制代码 和上面connect函数配套的也有三个槽函数,当网络哀求有相应的时间,实验相应的槽函数。
配套的三个槽函数,在头文件中 declare如下图:

- private slots:
-
- //处理获取外网ip请求的 槽
- void onGetIp(QNetworkReply*);
- //根据ip获取经纬度 处理服务器响应内容
- void onGetCurrentLoc(QNetworkReply*);
- //处理服务器返回地图图片
- void onSendMapRequest();
复制代码 如许,全部网络查询与处置惩罚事异步举行的。
让我们从查询Ip地点起步:
起首通过QNetworkAccessManager 一个实例对象 m_ipManager发起一个request哀求。
- void Form1::getIp()
- {
- // by m_ipManager query ip
- QUrl url("http://httpbin.org/ip"); //declare the url
- QNetworkRequest request(url); //declare the request
- m_ipManager->get(request); //send the request
- }
复制代码 这个哀求的相应?
嗯嗯,固然在槽函数当中了~~~ 窗体的构造函数中不是“声明”了一个“毗连”吗
|