我想QT刷地图但无WUDIG谁可以给我...

匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。本篇博文主要实现了:
(1)根据Qt中指定的中心点加载一副百度地图;
(2)单击目标点进行画圆;
(3)手动制定圆的半径进行画圆;
(4)获取目标点的经度和纬度,返回给Qt
最终效果:
(1)根据指定中心点加载一副地图
1)新建一个窗体工程,继承自QMainWindow。
用Qt界面设计器打开界面文件,在界面上托入QWebView控件,这时运行会出现错误,错误如下:
......... undefined reference to `QWebView::load(QUrl const&)' .........
...........................................................................
原因是没有在其工程文件.pro中加入所需的webkitwidgets,注意Qt5之前的版本是webkit。加入结果如下:
#-------------------------------------------------
# Project created by QtCreator T15:26:50
#-------------------------------------------------
QT&&&&&& += core gui
QT&&&&&& += webkitwidgets
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = gps_googlemap
TEMPLATE = app
SOURCES += main.cpp\
&&&&&&& mainwindow.cpp
HEADERS& += mainwindow.h
FORMS&&& += mainwindow.ui
此时,可以测试运行成功,可以进行网页的加载了
在加载百度地图API进行操作之前,需要在百度地图API中注册一个开发者帐号,获取密钥进行开发,具体注册方法见
My WebPage(显示的是我的整个的网页源码,显示根据指定的中心点显示百度地图的源码为红色部分):
&!DOCTYPE html&
&meta http-equiv=&Content-Type& content=&text/ charset=utf-8& /&
&meta name=&viewport& content=&initial-scale=1.0, user-scalable=no& /&
&style type=&text/css&&
body, html,#allmap {width: 100%;height: 100%;overflow:}
&script type=&text/javascript& src=&http://api./api?v=2.0&ak=您的密钥&&&/script&
&title&添加圆&/title&
&div id=&allmap&&&/div&
&script type=&text/javascript&&
// 百度地图API功能
var map = new BMap.Map(&allmap&);
var m_city = &北京&;
map.centerAndZoom(m_city, 13);&&&&&&&&&&&&&&&&&&&&&&&&&&&&& // 初始化地图,设置中心点坐标和地图级别
map.addControl(new BMap.OverviewMapControl());&&&&&&&&&&&&& //添加缩略地图控件
map.enableScrollWheelZoom();&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //启用滚轮放大缩小
var m_radius = 1000;
map.addEventListener(&click&,function(e){&&&&&&//单击目标点进行画圆
var circle = new BMap.Circle(e.point,m_radius);
map.clearOverlays();
map.addOverlay(circle);
m_point = e.
alert(e.point.lng + &,& + e.point.lat);
function SetCity(city){ //设置城市js函数
&&& m_city =
setTimeout(function(){&& //500ms后设置中心点为m_city
&&& map.setCenter(m_city);
function SetRadius(radius){& //设置半径
&&& m_radius =
function AutoSetCircle(){&&& //根据设置的半径重新画圆
&&& var circle2 = new BMap.Circle(m_point,m_radius);
&&& map.clearOverlays();
&&& map.addOverlay(circle2);
function ReturnLngLat(){//返回目标中心点的经度和纬度
& & var LngLat = new Array();
&&& LngLat[0] = m_point.
&&& LngLat[1] = m_point.
&&& return LngL
My Qt Code:
注:需在Qt界面编辑器中为QwebView控件加入loadFinished(bool arg1)信号
MainWindow::MainWindow(QWidget *parent) :
&&& QMainWindow(parent),
&&& ui(new Ui::MainWindow)
&&& ui-&setupUi(this);
&&& m_nRadius = 1000;&& //默认画圆半径 &
&&& m_strCity = &南阳&; //Qt中更改的显示中心点,网页中默认显示的北京
&&& QUrl url(&file:///home/lizuqing/Code/QtCode/gps_googlemap/mymap.html&);
&&& ui-&webView-&setUrl(url); //加载网页
MainWindow::~MainWindow()
void MainWindow::on_webView_loadFinished(bool)
&&& QWebFrame *frame = ui-&webView-&page()-&mainFrame();&&&
&&& QString method = QString(&SetCity(\&%1\&)&).arg(m_strCity);//调用js的SetCity进行目标城市设置
&&& frame-&evaluateJavaScript(method);
此上,已经完成根据指定中心点显示百度地图的功能
(2)单击目标点进行画圆;
此功能的实现主要是在网页源码中实现的:
map.addEventListener(&click&,function(e){&&&&&&//单击目标点进行画圆
var circle = new BMap.Circle(e.point,m_radius);
map.clearOverlays();
map.addOverlay(circle);
m_point = e.
alert(e.point.lng + &,& + e.point.lat);
(3)手动制定圆的半径进行画圆;
function SetRadius(radius){& //设置半径
&&& m_radius =
function AutoSetCircle(){&&& //根据设置的半径重新画圆
&&& var circle2 = new BMap.Circle(m_point,m_radius);
&&& map.clearOverlays();
&&& map.addOverlay(circle2);
在界面中托入一个文本框和一个按钮,对按钮绑定click信号,在click中写入处理代码:
void MainWindow::on_pushButton_clicked()
&&& QString strLineText = ui-&lineEdit-&displayText();
&&& m_nRadius = strLineText.toInt();
&&& QWebFrame *frame = ui-&webView-&page()-&mainFrame();
&&& QString method = QString(&SetRadius(\&%1\&)&).arg(m_nRadius); //调用js的SetRadius进行半径设置
&&& frame-&evaluateJavaScript(method);
&&& if(m_nRadius != 1000)
&&&&&&& frame-&evaluateJavaScript(&AutoSetCircle()&); //调用js的AutoSetCircle利用新半径重新画圆
(4)获取目标点的经度和纬度,返回给Qt
function ReturnLngLat(){ //返回目标中心点的经度和纬度
&&& var LngLat = new Array();
&&& LngLat[0] = m_point.
&&& LngLat[1] = m_point.
&&& return LngL
void MainWindow::on_pushButton_2_clicked()
&&& QWebFrame *frame = ui-&webView-&page()-&mainFrame();
&&& QVariant var = frame-&evaluateJavaScript(&ReturnLngLat()&); //调用js的ReturnLngLat返回目标点的经度和维度
&&& QStringList strList = var.toStringList(); //var中保存的是目标点的经度和维度
&&& for(i=0; i&strList.count(); i++)
&&&&&&& QMessageBox::information(NULL, QObject::tr(&Lng&Lat&), strList.at(i));
至此,功能已经全部实现完毕,完整源码请(有1分下载分,奖励下自己的辛苦,如果没有分数的,留下邮箱,我发过去)
Thank you for reading!&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ---- By lzq& NY
本文已收录于以下专栏:
相关文章推荐
今天开始研究地图了 为以后的航线显示做准备
首先想到的是调用google的地图,凭自己的感觉 地图好像google比较牛一点 。但是在自己查资料的过程中遇到的一些事情让我选择了百度地图。话不...
首先在百度地图开发API平台申请key
/index.php?title=首页
然后建立一个html文件,此处引用了别人的一个配置文件,少...
QT调用Google map通过webkit在线显示地图
改原理只是通过QT的webkit类,来显示Google map,然后通过JavaScript脚本将经纬度通过地图的标志(小红点)来显...
整个流程参照:
http://blog.csdn.net/lizuqingblog/article/details/?utm_source=tuicool&utm_medium=re...
本篇博文主要实现了:
(1)根据Qt中指定的中心点加载一副百度地图;
(2)单击目标点进行画圆;
(3)手动制定圆的半径进行画圆;
(4)获取目标点的经度和纬度,返回给Qt
1.下载百度地图离线API 1.3
下载链接:http://download.csdn.net/detail/caoshangpa/9476608,网上虽然出现了2.0版本离线API,但是经试用,存在...
1.JavaScript调用Qt函数
在构造时通过QWebFrame的addToJavaScriptWindowObject方法向Javascript提供对象引用
QString strMapPath...
他的最新文章
讲师:王哲涵
讲师:王渊命
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)2012年9月 移动平台大版内专家分月排行榜第二
2012年11月 移动平台大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。

参考资料

 

随机推荐