QML 地图修改插件源码(二)添加新的功能,并编译成dll

15 篇文章 34 订阅
11 篇文章 0 订阅

QML中的地图模块提供了大量的功能函数供用户使用,使用起来也很顺手,但是如果想在已经提供了功能函数基础上自己新增功能,比如Map提供了添加/删除地图中组件的函数:

此时我们想新增一个直接删除当前地图上所有已存在的MapItemView的函数时,就需要修改Map的源码,在源码中新增该函数,如需要修改其他模块的源码,方法类似,具体操作流程如下:

 第一步:打开源码所在位置的工程文件

在Qt的安装目录下,找到并打开Map对应的工程文件“..\Qt\5.11.2\Src\qtlocation\src\location\location.pro”,其中Map控件对应的文件为工程目录下的“declarativemaps\qdeclarativegeomap_p.h”“declarativemaps\qdeclarativegeomap.cpp”,在头文件即可看到所有Map提供的属性和功能代码,其中添加/删除地图组件函数为:

第二步:添加功能函数

在头文件中新增函数:

Q_INVOKABLE void removeAllMapItemView();

头文件新增信号:

void mapItemViewChanged();

在源文件中定义函数:

void QDeclarativeGeoMap::removeAllMapItemView()
{
    for(QDeclarativeGeoMapItemView * itemView : m_mapViews){
        if (!itemView || itemView->m_map != this) // can't remove a view that is already added to another map
            return;

        itemView->removeInstantiatedItems();
        itemView->m_map = 0;
        emit mapItemViewChanged();
    }
    m_mapViews.clear();
}

第三步:将修改好的源码编译成库文件

此时直接对工程进行构建,此时构建失败,提示

LINK : fatal error LNK1104: 无法打开文件“poly2trid.lib”

通过查看location.pro和declarativemaps.pri,工程中引用到了名为“clip2tri”、“poly2tri”、“clip2tri”三个库,这三个库位于..:\Qt\5.11.2\Src\qtlocation\src\3rdparty\目录下,分别打开对应文件夹下的工程文件,编辑构建即可,此时在Qt安装所在的盘(我的是F盘)的根目录下会多了一个lib文件夹和bin文件夹,里面就有新构建好的库文件。

此时重新构建location工程,无报错,库文件成功至lib文件夹和bin文件,如图:

第四步:替换原Qt原有的库文件

Qml中原有的Map的库文件路径:“..:\Qt\5.11.2\msvc2015\bin”和“..:\Qt\5.11.2\msvc2015\lib”,将编译好的.dll文件和.lib文件分别复制替换原文件即可

第五步:在Qml中使用新增的功能

MouseArea{
    anchors.fill: parent 
    onClicked: {
        myMap.removeAllMapItemView()
    }
}
Connections{
        target: myMap
        onMapItemViewChanged:{
            console.log("地图控件已被修改")
        }
    }

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

喵喵叫的猴

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

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

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

打赏作者

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

抵扣说明:

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

余额充值