文章目录

  • 前言
  • 一、通信桥梁bridge
  • 二、QT与JS相互通信(调用函数)
    • 1.QT调用js函数

前言

在上文《QT5百度地图开发学习——控件提升展示地图》中,我们通过控件提升的方式在同一界面展示了地图又可以显示按钮,本节就来展示如何使用这一按钮与百度地图通信交互。

一、通信桥梁bridge

设计bridge作为qt与百度地图的通信桥梁。
新建一个名字为bridge的C++文件。继承QObject,不需要改变其它的,这个文件的作用是用于js中调用qt函数,传递数据给qt。

这个时候还没有连接bridge,通过mainwindow.cpp代码连接bridge。
bdmap.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include<QWebChannel>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void on_pushButton_site_clicked();private:Ui::MainWindow *ui;QWebChannel *channel;
};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QDir>
#include<bridge.h>
#include<QWebChannel>
#include<QString>
#include<QDebug>
#include<QtWebEngineWidgets/QWebEnginePage>#pragma execution_character_set("utf-8")MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);channel = new QWebChannel(this);bridge *mybridge = new bridge();//创建通道对象用于与JS交互channel->registerObject("bridge_name",(QObject*)mybridge);ui->map->page()->setWebChannel(channel);//加载HTML文件QDir temDir("C:/Users/16198/Desktop/LearnToA/C++Learn/QTCode/day9/map/baidumap.html");QString absDir = temDir.absolutePath();QString filePath = "file:///" + absDir;//显示地图ui->map->page()->load(QUrl(filePath));//地图显示//ui->map->show();}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_pushButton_site_clicked()
{ui->map->page()->runJavaScript(QString("LocatedCity(\"%1\")").arg(QString(ui->lineEdit_city->text())));}

这样就注册好了,可以进行通信了。

二、QT与JS相互通信(调用函数)

1.QT调用js函数

功能设计:用户点击“定位”按钮,定位到输入地址的位置,如果地址错误,定位到北京市。
界面设计如图所示:

定位按钮转到槽。

下一步设计js函数。该函数的位置在baidumap.html中的。这个位置是写JavaScript代码的地方。

function LocatedCity(x){map.centerAndZoom(x, 12);//地图定位到x位置
};

槽函数:

void MainWindow::on_pushButton_site_clicked()
{bd.map->page()->runJavaScript(QString("LocatedCity(\"%1\")").arg(QString(ui->lineEdit_city->text())));
}

最后效果:
输入武汉市,点击定位:
得到武汉市位置地图

QT5百度地图开发学习——qt调用JavaScript函数并传参相关推荐

  1. QT5百度地图开发学习——qt调用输入位置坐标位置进行百度地图定位

    系列文章目录 上一章: QT5百度地图开发学习--JavaScript调用qt函数并传参给qt 文章目录 系列文章目录 前言 一.界面设计 二.槽函数 总结 前言 本文实现输入坐标然后在地图上显示位置 ...

  2. QT5百度地图开发学习——地图显示

    文章目录 前言 一.工程创建 二.地图显示 1.pro文件更改 2.载入地图显示 3.特别注意 总结 前言 当qt5+MSVC环境搭建成功和将baidumap.html,qwebchannel.js准 ...

  3. 点击事件调用匿名函数如何传参_事件发布/订阅模式的简单实现

    这是一种广泛应用于异步编程的模式,是回调函数的事件化,常常用来解耦业务逻辑.事件的发布者无需关注订阅的侦听器如何实现业务逻辑,甚至不用关注有多少个侦听器存在.数据通过消息的方式可以灵活的传递. --& ...

  4. Qt开发北斗定位系统融合百度地图API及Qt程序打包发布

    Qt开发北斗定位系统融合百度地图API及Qt程序打包发布 1.上位机介绍 最近有个接了一个小型项目,内容很简单,就是解析北斗GPS的串口数据然后输出经纬度,但接过来觉得太简单,就发挥了主观能动性,增加 ...

  5. 使用QT嵌入百度地图开发高B格岸基监控软件

    文章目录 1.简述 2.百度地图 2.1百度地图准备 2.2 百度地图开发 2.2.1实时绘制轨迹 2.2.2设定航点 3 QT软件开发 3.1使用QWebEngineView显示Html 3.2 M ...

  6. Android学习 - 百度地图开发基础

    什么是百度地图API? 百度地图移动版API(Android)是一套基于Android 1.5及以上设备的应用程序接口,通过该接口,您可以轻松访问百度服务和数据,构建功能丰富.交互性强的地图应用程序. ...

  7. GPS坐标显示在百度地图上(Qt+百度地图)

    Qt在5.6以后的版本就不支持通过mingw编译器来调用webview控件了,这里我用的是Qt5.4的版本,用mingw编译器调试的. 下面简单介绍下Qt与html中的javascript调用交互过程 ...

  8. [android] 百度地图开发 (二).定位城市位置和城市POI搜索

    一. 百度地图城市定位和POI搜索知识       上一篇文章"百度地图开发(一)"中讲述了如何申请百度APIKey及解决显示空白网格的问题.该篇文章主要讲述如何定位城市位置.定位 ...

  9. 通过腾讯地图、高德地图、百度地图开发接口获取坐标对应的周边相关信息

    通过腾讯地图.高德地图.百度地图开发接口获取坐标对应的周边相关信息 更新: 以前出于好意暴露了个人的KEY,现已被烂用.为不影响您的业务,请使用我的KEY的朋友去申请自己的KEY,我的KEY将在不久后 ...

最新文章

  1. c++中的vector的常见使用
  2. 皮一皮:这是。。。养了个白眼狼???
  3. 船舶定位实时查询系统_真趣:IDC机房人员定位系统,位置实时监测,巡检路线智能规划...
  4. 利用动态规划(DP)解决 Coin Change 问题
  5. 用最科学的方法展示最形象的图表——前段数据可视化选型实践
  6. _int64_在Linux对应对文件,linux下32位机与64位机基本数据类型长度对比
  7. ArcGIS 的 http://localhost:8399/arcgis/rest/services 无法打开,显示404 的解决办法
  8. element ui里dialog关闭后清除验证条件
  9. C++11智能指针处理Array对象
  10. 数组:正整数数组分成2组使其和的差的绝对值最小
  11. 并发控制中存在问题及解决方案
  12. 全链路压测实施思路流程分析
  13. 有关Idea的Invalidate Caches/Restart
  14. grub4dos引导启动linux,Grub4Dos 手动引导指令
  15. 黎曼积分求解可微曲线的弧线长度
  16. struts2中No result defined for action xxx.xxx.xxx and result xxx错误的几种解决方法
  17. folly库安装(3)libevent、libunwind的安装
  18. Insta360影石递交注册:年营收将超12亿 启明与迅雷为股东
  19. Linux shell脚本1
  20. 基于线激光的目标轮廓检测

热门文章

  1. 移动端网页禁止下拉刷新css
  2. 第一章SKU核心思路
  3. android sdk 环境签名,SDK接入必备常识——keystore签名文件详解
  4. 100集华为HCIE安全培训视频教材整理 | Agile Controller终端安全管理特性(三)
  5. 帝国理工创新领袖:数据驱动创新的五种模式
  6. Lucene2.9.1使用小结 (注释1)
  7. 数字图像处理课程设计报告
  8. 1. 树莓派点灯学习(UI界面控制)
  9. 数字孪生技术助力高炉数字化建设的可行性
  10. jQuery动画操作