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查询,即从单个数据库表中检索数据的单条语 ...
随机推荐
- CSS自定义属性expression_r
CSS的出现使网页制作者在对网页元素的控制方便许多,当然,有利必有弊,CSS只能对颜色.大小.距离等静态样式有效,对于要实现某些html元素的动态样式就显得有些力不从心.有了CSS的自定义属性expr ...
- Yii2上传图片插件使用
例子: 1.在表单中: <?php $form = \yii\widgets\ActiveForm::begin([ 'options'=>[ 'class' => 'form-ho ...
- pip install MySQL-python 失败
1. EnvironmentError: mysql_config not found原因:/usr/bin/mysql_config没有次文件,要安装libmysqlclient-dev, apt ...
- ubuntu 完全卸载mysql
卸载 sudo apt-get --purge remove mysql-common -y sudo apt-get --purge remove mysql* -y sudo apt-get au ...
- MyBatis Generator报错:Cannot instantiate object of type
[ERROR] Failed to execute goal org.mybatis.generator:mybatis-generator-maven-plugin:1.3.2:generate ( ...
- Socket初见
前端代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <t ...
- How to SHA1 on macOS
openssl sha1 /volumes/test/install/osx-test.dmg
- ReadWriteLock读写锁(八)
前言:在JUC ReentrantReadWriteLock是基于AQS实现的读写锁实现. ReadWriteLock中定义了读写锁需要实现的接口,具体定义如下: public interface R ...
- 9.Pod控制器概念和基本操作2
利用一个简单的例子来启动一个deployment的Pod控制器 [root@master song]# cat deploy.yml apiVersion: apps/v1 kind: Deploym ...
- How to execute a Stored Procedure with Entity Framework Code First
Recently I worked on a project, which I started as code first and then I forced to switch to Databas ...