一、前言
2022年圣诞节到来啦,很高兴这次我们又能一起度过~
 遇上圣诞节,正好最近研究了QT中加载百度离线地图,用百度地图API加载个圣诞树(主要我想要那个圣诞节特制勋章)。
二、创意名
在百度离线地图加载个圣诞树。
三、效果展示

 本来应该做成gif格式,奈何电脑的制作工具找不到了,那个圣诞树会动的,在合肥的位置不灵不灵的。
四、实现步骤(很重要)
4.1 前提
1、QT中能使用QWebEngine必须要在VS2017以及以上使用,才支持,这点很重要;
 2、百度离线地图地图下载我用的是 地址
 里面有很多百度给的官方API用例
 3、如果使用其他下载地图切片,我使用的是全能地图下载器,切记下载百度地图,因为你用的是百度的API,如果使用谷歌的那就下载对应的,不然地图加载不了
4.2 步骤
1、创建一个widget,然后提升为QWebEngineView;
 2、在百度官方例子中使用一个满足自己功能,如果想日后自己使用,最好精简一个版本
 3、QT与html前端的交互,功能可以用js写在html中,也可以写在其他中,通过Webchannel传递;
五、编码实现
主要代码展示
 QT中初始化时候代码
    ui->setupUi(this);
    view = ui->widget;
    QDir temDir("../TestMap3/Baidu_JS/sample.html");
    QString absDir = temDir.absolutePath();
    QWebChannel *channel = new QWebChannel(this);
   //brige 是一个类,在qt中定义,然后在html文本中注册就可以使用   其中的功能函数
    channel->registerObject("bridge"   
    (QObject*)bridge::instance());
   view->page()->setWebChannel(channel);
   view->page()->load(QUrl(QString("file:///%0").arg(absDir)));
   connect(ui->pushButton, &QPushButton::clicked, [this]() {
       view->page()->runJavaScript("showSant()");
 
前端html主要代码
function showSant() {
      		var pt = new BMap.Point(117.209338, 31.85);
			var myIcon = new BMap.Icon("./sant.gif", new BMap.Size(32,32));
			var marker2 = new BMap.Marker(pt,{icon:myIcon});  // 创建标注
			map.addOverlay(marker2);              // 将标注添加到地图中
      }
//注册使用 bridge类
      new QWebChannel(qt.webChannelTransport, function(channel) {
        window.bridge = channel.objects.bridge;
        window.bridge.sigYourName.connect(function(name) {
          alert(name);
        });
      });
      function onShowMsgBox() {
        bridge.showMsgBox()
      }
      function onGetYourName() {
        bridge.getYourName();
      }
                



![[4]MQTT协议基础--下](https://img-blog.csdnimg.cn/b19315eb2ce8493a826f10e53555c524.png)













