qt6 获取百度舆图(一)

[复制链接]
发表于 2026-2-3 14:07:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
需求分析:
要获取一个舆图,
须要ip
须要根据ip查询经纬度
根据经纬度查询舆图
别的一条线是根据输入的地点 查询ip 根据查询到的ip查舆图‘
末了,要渲染舆图
上面这这些动作,要举行http查询:
为此要有三个QNetworkAccessManager对象:
  1.     QNetworkAccessManager *m_ipManager;  // 用于ip管理
  2.     QNetworkAccessManager *m_locManager;   // 用于查询位置
  3.     //网络管理对象  发送地图图片
  4.     QNetworkAccessManager *m_mapManager;   //查询地图
  5.     //响应对象 接收地图图片
  6.     QNetworkReply *m_mapReply=NULL;   //响应
复制代码

全部的查询动作固然能序次实验:
如先查询ip
     期待获取IP返回效果
          假如IP返回了,发起根据IP查询经纬度的哀求
                 期待经纬度查询效果,假如得到的返回,则进一步根据返回的经纬度查询舆图数据
                          期待舆图数据查询效果,把效果写入文件
                                   从文件中读取数据,渲染到weigt上

但是 假如此中某个环节网络断了 大概百度服务器宕机了,体系就会卡死。
按上面步调,网络哀求是同步序次,实验来的,用户界面大概会壅闭,用户体验欠佳。
为此我们引入槽函数机制!让网络哀求是异步举行,用户界面不会壅闭,这提供了更好的用户体验!
在构造函数中,添加如下代码:
  1. Form1::Form1(QWidget *parent)
  2.     : QWidget(parent)
  3.     , ui(new Ui::Form1)
  4. {
  5.     ui->setupUi(this);
  6.     //new一个网络管理对象
  7.     m_ipManager = new QNetworkAccessManager(this);  //  net connection tool ,duty is to connect to the server
  8.     //declare  connect relationship ,when receive the response ,call the slot function,response is finished signal
  9.     connect(m_ipManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(onGetIp(QNetworkReply*)));
  10.     m_locManager=new QNetworkAccessManager(this);  //net connection tool ,duty is to connect to the server for location
  11.     //declare  connect relationship ,when receive the response ,call the slot function,response is finished signal
  12.     connect(m_locManager,SIGNAL(finished(QNetworkReply*)),this,SLOT(onGetCurrentLoc(QNetworkReply*)));
  13.     m_mapManager=new QNetworkAccessManager(this);   //net connection tool ,duty is to connect to the server for map query map
  14.     connect(m_mapManager,SIGNAL(finished(QNetworkReply*)),this,SLOT(onSendMapRequest()));
  15. }
复制代码
和上面connect函数配套的也有三个槽函数,当网络哀求有相应的时间,实验相应的槽函数。
配套的三个槽函数,在头文件中 declare如下图:


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

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表