OpenLayers学习笔记(二)— QML与HTML通信之画图
作者: 狐狸家的鱼
Github: 八至
一、HTML-map
var drarGraphic;
var drawType;function addDrawInteraction(){
var geometryFunction;
console.log(drawType);
if(drawType !== ''){
if (drawType === 'RecTangle') {
drawType = 'Circle';
geometryFunction = ol.interaction.Draw.createRegularPolygon(4);
}
drarGraphic = new ol.interaction.Draw({
type:drawType,
source:vectorSource,//数据源
geometryFunction: geometryFunction
});
map.addInteraction(drarGraphic);//添加画图功能在地图中
}
};
二、QML
1.创建WebChannel
WebControl.qml,此qml页面为创建webchannel
import QtQuick 2.7
import QtWebChannel 1.0
QtObject {
//一个具有属性、信号和方法的对象——就像任何普通的Qt对象一样
id: mapController
WebChannel.id: "content"//ID将作为在WebEngineView端的已知对象
//信号
signal drawGraphic(string type) //画图
}
2.将ID分配给WebEngineView,并在该通道注册QtObject的ID。
main.qml
import QtQuick 2.9
import QtQuick.Window 2.3
import QtWebEngine 1.3
import QtWebChannel 1.0
WebControl {//WebControl.qml作为组件
id: map;
}
WebEngineView {
id: mapView_1;
anchors.fill: parent;
url: "./Map.html";//html的url地址
webChannel: WebChannel {
registeredObjects: [map];//注册ID
}
}
3.QML与HTML交互
(1)在HTML端引入WebChannel的JavaScript库
<script type="text/javascript" src="qwebchannel.js"></script>
(2)在windows.onload()事件上创建QWebChannel,并获取后端对象
window.onload =() =>{
new QWebChannel(qt.webChannelTransport, (channel)=> {
var content = channel.objects.content;//自定义
}
(3)html调用QWebChannel的方法,连接到它的信号并访问它的属性
window.onload =() =>{
new QWebChannel(qt.webChannelTransport, (channel)=> {
var content = channel.objects.content;//自定义
//画图
content.drawGraphic.connect((type)=>{//连接WebControl.qml中的drawGraphic(string type)信号
drawType = type;
map.removeInteraction(drarGraphic);
addDrawInteraction();
});
}
(4)qml中画图按钮调用信号
//画线段 这里只贴了画直线的代码 其他画图按钮调用信号方法一样的
BorderButton{
width: right.width/9;
height: btnHeight;
borderbtnText:"Line";
onClicked: {
var type = 'LineString';
console.log('clicked drawLine');
map.drawGraphic(type);
}
}
OpenLayers学习笔记(二)— QML与HTML通信之画图的更多相关文章
- OpenLayers学习笔记(三)— QML与HTML通信之 地图上点击添加自由文本
实现在地图随意点击,弹出文本输入框,输入任意文字,完成自由文本添加的功能 作者: 狐狸家的鱼 GitHub:八至 本文链接:地图上点击添加自由文本 关于如何QML与HTML通信已经在上一篇文章 QML ...
- qml学习笔记(二):可视化元素基类Item详解(上半场anchors等等)
原博主博客地址:http://blog.csdn.net/qq21497936本文章博客地址:http://blog.csdn.net/qq21497936/article/details/78516 ...
- OpenLayers学习笔记(四)— QML显示html中openlayers地图的坐标
GitHub:八至 作者:狐狸家的鱼 本文链接:实现QML中显示html中地图的坐标 如何QML与HTML通信已经在这篇文章 QML与HTML通信之画图 详细讲述了 1.HTML var coord; ...
- [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计
源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...
- WPF的Binding学习笔记(二)
原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...
- AJax 学习笔记二(onreadystatechange的作用)
AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...
- JMX学习笔记(二)-Notification
Notification通知,也可理解为消息,有通知,必然有发送通知的广播,JMX这里采用了一种订阅的方式,类似于观察者模式,注册一个观察者到广播里,当有通知时,广播通过调用观察者,逐一通知. 这里写 ...
- java之jvm学习笔记二(类装载器的体系结构)
java的class只在需要的时候才内转载入内存,并由java虚拟机的执行引擎来执行,而执行引擎从总的来说主要的执行方式分为四种, 第一种,一次性解释代码,也就是当字节码转载到内存后,每次需要都会重新 ...
- Java IO学习笔记二
Java IO学习笔记二 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入输 ...
- 《SQL必知必会》学习笔记二)
<SQL必知必会>学习笔记(二) 咱们接着上一篇的内容继续.这一篇主要回顾子查询,联合查询,复制表这三类内容. 上一部分基本上都是简单的Select查询,即从单个数据库表中检索数据的单条语 ...
随机推荐
- [转帖]linux 清空history以及记录原理
linux 清空history以及记录原理 自己的linux 里面总是一堆 乱七八槽输错的命令 用这个办法 可以清空 linux的内容. 清爽一些. 1.当前session执行的命令,放置缓存中,执行 ...
- Windows10 等 administrator 打开IE 或者edge的方法
gpedit.msc 组策略处理即可
- js中怎么使点击按钮后文本框获得焦点
<html> <head> <script type="text/javascript"> function setFocus() { docu ...
- 在linux上安装spark详细步骤
在linux上安装spark ,前提要部署了hadoop,并且安装了scala. 提君博客原创 对应版本 >>提君博客原创 http://www.cnblogs.com/tijun/ ...
- Day3-1 函数
定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可 特性: 减少重复代码 使程序变的可扩展 使程序变得易维护 语法: def calc(x, y): ...
- Hibernate最佳实战
1:一对一,一对多,多对多双向管理必设mappedBy ,将关系交给乙方维护,不然的话会在双方都建立关系,比如一对一双向的时候双方都会保存对方的id外键管理 具体在项目中采用双向还是单项看实际情况. ...
- 安装mysql zip5.7版--安裝
一直以来都习惯了使用MySQL安装文件(.exe),今天下载了一个.zip版本的MySQL,安装过程中遇到了一些问题,如下: 1.在MySQL官网上(http://dev.mysql.com/down ...
- 【python练习题】程序17
#题目:输入一行字符,分别统计出其中英文字母.空格.数字和其它字符的个数. s = input('请输入字符串:') alf = 0 space = 0 digi = 0 other = 0 for ...
- luogu3391
P3391 [模板]文艺平衡树(Splay) 题目背景 这是一道经典的Splay模板题——文艺平衡树. 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转 ...
- Django通用视图APIView和视图集ViewSet的介绍和使用
原 Django通用视图APIView和视图集ViewSet的介绍和使用 2018年10月21日 14:42:14 不睡觉假扮古尔丹 阅读数:630 1.APIView DRF框架的视图的基类是 ...