使用Qt Mobility Map and Navigation API显示地图
文章信息
代码示例
源文件: Media:MapEmbeded.zip
测试基于
设备:: Nokia 5800 and N8.
兼容于
平台: S60 3rd Edition, FP1, FP2
S60 5th Edition Symbian^3
S60 5th Edition Symbian^3
文章
关键词: QGraphicsGeoMap
由 flycarl
在 18 Nov 2010 创建
最后由 hamishwillee
在 24 Apr 2013 编辑
Contents |
简介
这里的代码演示如何使用Qt Mobility的地图导航API调用 Nokia Ovi 地图的在线地图插件 来显示地图,这个例子是Qt Mobility中 Map Viewer 例子的精简版,只是显示一定区域一定大小的地图,以方便大家熟悉 QGraphicsGeoMap 的使用。 同时结合Location API获取实时的位置并显示地图。
准备条件
- 安装Qt:Qt 开发入门
- 安装QtMobility API 1.1.0 :Qt Mobility 在Symbian平台的安装
编辑pro文件
由于我们使用的Ovi地图的在线版本所以需要加入网络支持 (network),Mobility bear 和location需要的能力参见Qt Mobility API 需要的能力。
QT += core gui network
CONFIG += mobility
MOBILITY = location bearer
symbian {
TARGET.CAPABILITY += Location \
NetworkServices \
ReadUserData \
WriteUserData \
ReadDeviceData \
WriteDeviceData
}
代码
类QGraphicsGeoMap是显示地图和与地图交互的主要的类。这个类设计为使用 Graphics View 框架。 这里我们也用QGraphicsView来存放地图显示。
QGraphicsView* m_qgv;
QGraphicsScene* scene = new QGraphicsScene(this);
m_qgv = new QGraphicsView(scene, this);
this->setCentralWidget(m_qgv);
设置网络连接并不把Map and Navigation相关的初始化放在 连接打开后来做
m_session = new QNetworkSession(cfg, this);
connect(m_session, SIGNAL(opened()), this, SLOT(networkSessionOpened()));
在networkSessionOpened()中继续初始化测操作。
void MainWindow::networkSessionOpened()
{
//设置QGeoServiceProvider,设置为Mobiliy自带的Ovi地图插件
setProvider("nokia");
//设置QGraphicsGeoMap的界面
setupUi();
}
类QGeoMappingManager 提供QGraphicsGeoMap需要的绝大多数方法, QGeoMappingManager 由QGeoServiceProvider提供,这里我们使用Qt Mobility自带的Ovi在线地图插件,因此最终显示在QGraphicsGeoMap中的地图,都是来自Ovi在线地图插件。插件的关键字'nokia'。
void MainWindow::setProvider(QString providerId)
{
m_serviceProvider = new QGeoServiceProvider(providerId);
m_mapManager = m_serviceProvider->mappingManager();
}
有了QGeoMappingManager ,可以开始设置QGraphicsGeoMap
void MainWindow::setupUi()
{
//通过QGeoMappingManager 初始化
m_mapWidget = new QGraphicsGeoMap(m_mapManager);
//放到m_qgv中来显示
m_qgv->scene()->addItem(m_mapWidget);
//设置图像中心的地理坐标
m_mapWidget->setCenter(m_currentCoordinate);
//设置缩放比例
m_mapWidget->setZoomLevel(15);
//设置地图种类,街道图,卫星图等等
m_mapWidget->setMapType(QGraphicsGeoMap::SatelliteMapDay);
}
好这样地图就能显示出来了。


(no comments yet)