首页 > 其他分享 >如何在QT5+MinGW环境中编译使用Marble开发地图地球仪

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

时间:2024-10-24 17:48:25浏览次数:9  
标签:src QT5 lib marble MinGW Marible release Marble

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库吧!

标签:src,QT5,lib,marble,MinGW,Marible,release,Marble
From: https://blog.csdn.net/wangningyu/article/details/143086247

相关文章

  • qt5multimedia播放rtsp延迟高
    Qt5Multimedia在Liunux平台已实现对Gstreamer的支持,近期在RK3588平台,使用Qt5Multimedia播放RTSP流时,遇到延迟高问题(3s左右),查看API,Qt5Multimedia无法向Gstreamer传递参数。解决办法:重新编译qt5multimedia;修改qt5multimedia/src/gsttools/qgstreamerplayersession.cppGstE......
  • 用PyQt5中的textline实现log的实时显示
    在PyQt5中使用QLineEdit(即QTextLine的实现类之一)来实现日志的实时显示是可行的,但可能不适合大规模、多行日志的输出,因为QLineEdit仅支持单行文本。若要显示多行日志,建议使用QTextEdit,它更适合日志实时显示。但如果你确实希望使用QLineEdit来实现简单的日志输出,可以通......
  • 深度学习CNN算法狗类识别系统01-python带pyqt5界面数据集包配置
    项目基本介绍:【算法】深度学习CNN网络xception算法网络【环境】python=3.8pytorchopencvpyqt5matplotlib(含详细环境配置教程视频)【文件】训练、预测全部源代码、训练好的型、数据集、模型评价指标:训练acc/loss曲线图和混淆矩阵图、UI界面源码及源文件、环境配置教程视......
  • Windows 配置 MinGW-64
    下载地址:https://sourceforge.net/projects/mingw-w64/files/1.介绍MinGW,全称为MinimalistGNUonWindows,是将开源C语言编译器GCC移植到Windows平台的产物,它包含Win32API,能将源代码编译为可在Windows运行的可执行程序,还可使用一些Windows不具备的Linux平台下的开发工具......
  • PyQt5 使用 Pyinstaller+multiprocessing 打包多进程应用时,引发的一些问题
    解决Pyinstaller打包PyQt5+multiprocessing多进程应用时,引发的一些问题,包括反复启动主进程,以及:AttributeError:'NoneType'objecthasnoattribute'write'本文提供一些解决方案,您可能需要根据自己的实际情况,逐个尝试,直到自己的multiprocessing多进程应用正常运行一、解决......
  • qt5报错无法枚举xxx字体:qt.qpa.fonts: Unable to enumerate family ' "WenYue XinQing
    问题描述:使用qt5时,出现错误提示:qt.qpa.fonts:Unabletoenumeratefamily'"WenYueXinQingNianTi(Non-CommercialUse)"'虽然不影响正常使用,但是还是希望解决。猜测:可能是qt5在自动枚举字体时,系统中安装的字体名称过长或其他参数不合规导致qt5无法枚举。如果此字体不是项......
  • PyQt5开发环境搭建和配置
    PyQt5工具可以快速实现简单的界面开发,包括界面设计、布局管理以及业务逻辑实现(信号与槽)。简单说就是使用PyQt5工具可以快速画一个控件摆放整齐、界面整洁有序、布局合理的界面。课程目标可以动手实现简单的GUI程序。系列文章主要以动手实践案例讲解为主。课程对象会一些......
  • 【Python开发技术之PyQt5精品教学】第36课--PyQt5 拖放功能
    PyQt5拖放功能拖放功能对用户来说非常直观。它被应用于许多桌面应用程序,用户可以将对象从一个窗口复制或移动到另一个窗口。基于MIME的拖放数据传输是基于QDrag类实现的。QMimeData对象将数据与对应的MIME类型关联起来。数据被存储在剪贴板中,然后在拖放过程中使用。以下QMi......
  • 【Python开发技术之PyQt5精品教学】第32课--PyQt5 QDialog类
    PyQt5QDialog类QDialog 是一个顶层窗口小部件,主要用于收集用户的响应。它可以配置为 模态 (它会阻塞其父窗口)或 非模态 (对话框窗口可以被绕过)。PyQt API有许多预配置的对话框小部件,例如InputDialog,FileDialog,FontDialog等。示例在下面的示例中,对话框窗口的 WindowMo......
  • 【Python开发技术之PyQt5精品教学】第24课--PyQt5 QTab小部件
    PyQt5QTab小部件如果一个表单具有太多字段无法同时显示,则可以将它们安排在选项卡窗口小部件的每个选项卡下的不同页面中。提供了一个选项卡栏和一个页面区域。第一个选项卡下的页面会显示,其他页面会隐藏。用户可以通过点击所需的选项卡来查看任何页面。以下是QTabWidget类的......