如何在QT5+MinGW环境中编译使用Marble开发地图地球仪

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

Marble它是一个虚拟地球仪和地图应用程序,支持多种平台。Marble 提供 2D 和 3D 的地图视图,能够展示各种地理信息,像卫星图、街道图、气象图等。它还支持自定义插件、路线规划、离线地图等功能,适合地理信息系统 (GIS) 和教育用途。

Marble 有多种使用场景,可以集成到 Qt 应用中。你可以在使用 Marble 作为独立应用,也可以将其嵌入到自己的项目中.

你可以按照以下步骤搭建qt vs marble开发环境:

1. 先安装git和cmake工具

  https://git-scm.com/downloads

  安装CMake时会默认勾选添加到环境目录
  Download CMake

2.测试QT5+MinGW 32位环境

打开程序菜单中的Qt 5.14.2 (MinGW 7.3.0 32-bit)环境,先来克隆marble源代码

  创建目录D:\marble,在里面创建两个不同目录,如果链接下载不了的话请在管网查看最新的:

Marble - find your way and explore the world

mkdir build-release build-debug
git clone -b Applications/17.04 https://invent.kde.org/education/marble

如果下载太慢或无响应,请自带梯子;

官方的代码居然还能编译报错了,不太清楚为啥为漏掉一行?解决办法如下:

在克隆下载完代码到本地后, 先打开下面的一些文件中加一行#include <QIcon>

D:\Marible\src\plugins\render\gpsinfo\GpsInfo.h
D:\Marible\src\plugins\render\speedometer\Speedometer.h
#include <QIcon>

3.构建CMake文件并编译生成QT库libmarblewidget-qt5.dll.a

分别进不同目录依次输入以下命令(一般不需要debug版本)

// release版本 (注意当前操作目录)
cd D:\Marible\build-release
cmake -G "MinGW Makefiles" -DQTONLY=TRUE -DQT5BUILD=TRUE -DCMAKE_BUILD_TYPE=RelWithDebInfo ..
mingw32-make
// debug版本 (注意当前操作目录)
cd D:\Marible\build-debug
cmake -G "MinGW Makefiles" -DQTONLY=TRUE -DQT5BUILD=TRUE -DCMAKE_BUILD_TYPE=Debug ..
mingw32-make

这里会非常慢,我这台老爷车(i7-6700HQ + 32GB) 跑了15分钟才编译20%(大写的尴尬)

4. QT Creator新建一个默认QMainWindow的工程

在.pro工程文件末尾添加以下代码:

可以注释掉debug这里全部采用release版本即可

# 根据构建模式更改头文件目录
#win32:debug {
#   INCLUDEPATH += D:/Marible/build-debug/src/lib/marble
#   LIBS += "D:/Marible/build-debug/src/lib/marble/libmarblewidget-qt5.dll.a"
#}

#win32:release {
    INCLUDEPATH += D:/Marible/build-release/src/lib/marble
    LIBS += "D:/Marible/build-release/src/lib/marble/libmarblewidget-qt5.dll.a"
#}

INCLUDEPATH +=  D:/Marible/src/lib/ \
                D:/Marible/src/lib/marble/ \
                D:/Marible/src/lib/marble/blendings \
                D:/Marible/src/lib/marble/cloudsync \
                D:/Marible/src/lib/marble/declarative \
                D:/Marible/src/lib/marble/geodata \
                D:/Marible/src/lib/marble/geodata/data \
                D:/Marible/src/lib/marble/geodata/graphicsitem \
                D:/Marible/src/lib/marble/geodata/handlers \
                D:/Marible/src/lib/marble/geodata/parser \
                D:/Marible/src/lib/marble/geodata/scene \
                D:/Marible/src/lib/marble/geodata/writer \
                D:/Marible/src/lib/marble/geodata/writers \
                D:/Marible/src/lib/marble/geodata/writers/dgml \
                D:/Marible/src/lib/marble/geodata/writers/kml \
                D:/Marible/src/lib/marble/graphicsview \
                D:/Marible/src/lib/marble/layers \
                D:/Marible/src/lib/marble/osm \
                D:/Marible/src/lib/marble/projections \
                D:/Marible/src/lib/marble/routing \
                D:/Marible/src/lib/marble/routing/instructions \

这个是mainwindow.cpp中修改的部分代码:

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <marble/MarbleWidget.h>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // Load Marble using OpenStreetMap in Mercator projection
    Marble::MarbleWidget *mapWidget = new Marble::MarbleWidget;
    mapWidget->setProjection(Marble::Mercator);

    // 注意这个路径是官方自带的数据
    mapWidget->setMapThemeId("data/maps/earth/openstreetmap/openstreetmap.dgml");

    setCentralWidget(mapWidget);
    setWindowTitle("Hello Marble!");
}

5. 发布QT marble程序

   将这两个marble生成的dll拷贝到你程序根目录下:

D:\Qt\Qt5.14.2\5.14.2\mingw73_32\bin>windeployqt.exe C:\Users\xx\Desktop\MarbleTest\release\YouApp.exe
D:\Qt\Qt5.14.2\5.14.2\mingw73_32\bin>windeployqt.exe C:\Users\xx\Desktop\MarbleTest\release\libastro.dll
D:\Qt\Qt5.14.2\5.14.2\mingw73_32\bin>windeployqt.exe C:\Users\xx\Desktop\MarbleTest\release\libmarblewidget-qt5.dll

 官方自带的APP下载地址:

Marble - find your way and explore the world

将官方的data拷贝过来到你的APP目录中就可以直接使用它自带的地图数据了:

发布版本的主目录应该是这样的:

鼠标可以拖拽,滚动缩放等等,运行后效果图如下:

下一期再介绍如何在Visual Studio环境生成.lib库吧!

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汪宁宇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值