qml开发笔记(七):输入元素鼠标输入MouseArea和键盘输入Keys
若该文为原创文章,未经允许不得转载
原博主博客地址:https://blog.csdn.net/qq21497936
原博主博客导航:https://blog.csdn.net/qq21497936/article/details/102478062
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/78552121
各位读者,知识无穷而人力有穷,要么改需求,要么找专业人士,要么自己研究
目录
前话
MouseArea
描述
拓展mouseEvent
属性
信号
Keys
关于KeyEvent
描述
属性
信号
红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中...(点击传送门)
Qt开发专栏:qml开发(点击传送门)
qml开发笔记(七):输入元素鼠标输入MouseArea和键盘输入Keys
前话
本章节笔记开始进入qml用户输入元素的介绍和学习,本篇章主要学习鼠标捕捉MouseArea和键盘捕捉Keys。
MouseArea
描述
该元素主要是指定一个可以鼠标交互的区域,本身不可见,所以必须与可视化元素联合起来一起使用,一般是当作可视化区域的子对象存在。
拓展mouseEvent
属性
- acceptedButtons : Qt::MouseButtons [能接受的鼠标事件]
- containsMouse : bool [只读][鼠标是否在区域中按下,必须可接受的鼠标事件点击pressed后才会true,松开恢复false]
- cursorShape : Qt::CursorShape [鼠标在区域中显示的图标,很多种图标]
隐藏鼠标并屏蔽事件
Rectangle {width: 200;height: 200;color: "gray";MouseArea {anchors.fill: parent;id: mouse;cursorShape: Qt.IBeamCursor;}
}
- drag [拖动类别]
- drag.target : Item [指定拖动的目标对象id]
- drag.active : bool [目标对象是否正在被拖动]
- drag.axis : enumeration [拖动方式,横轴、纵轴或者两者都有]
- drag.minimumX : real [指定拖动的最小X坐标]
- drag.maximumX : real[指定拖动的最大X坐标]
- drag.minimumY : real [指定拖动的最小Y坐标]
- drag.maximumY : real[指定拖动的最大Y坐标]
Rectangle {id: container;width: 200; height: 200;color: "gray";Rectangle {id: rect;
// anchors.left: parent.left // 若打开此句,则左边一直与父窗口左边垂直,无法横向拖动了width: 50; height: 50;color: "red";opacity: (200.0 - rect.width - rect.x) / (200.0 - rect.width); // 拖动横轴影响透明度MouseArea {anchors.fill: parent;drag.target: rect;drag.axis: Drag.XAxis | Drag.YAxis;drag.minimumX: 0;drag.maximumX: container.width - rect.width;drag.minimumY: 0;drag.maximumY: container.height - rect.height;}}
}
- drag.filterChildren : bool [是否过滤掉子对象,过滤掉:鼠标点击先触发父对象后触发子对象]
Rectangle {width: 480height: 320Rectangle {x: 30; y: 30width: 300; height: 240color: "lightsteelblue"MouseArea {anchors.fill: parentdrag.target: parent;drag.axis: "XAxis"drag.minimumX: 30drag.maximumX: 150drag.filterChildren: trueonClicked: console.log("Clicked 11")Rectangle {color: "yellow"x: 50; y : 50width: 100; height: 100MouseArea {anchors.fill: parentonClicked: console.log("Clicked")}}}}
}
- drag.threshold : real [以拖动操作开始时的像素值确定阈值。默认情况下,这将绑定到与平台相关的值。此属性添加在qtquick 2.2中]
- enabled : bool [enabled属性来启用和禁用鼠标代理项目的处理。当禁用时,鼠标区域对鼠标事件透明]
- hoverEnabled : bool [默认情况下,鼠标事件只在响应按钮事件或按下按钮时处理。即使没有按下鼠标按钮,悬停也能处理鼠标事件,主要影响onTntered和onExited事件,默认是false需按下触发,设置为true后,则鼠标进入区域就触发]
Rectangle{color:"green"width: 28height: 28MouseArea{id:mouse;anchors.fill:parenthoverEnabled: true; // true-鼠标进入变色 false-鼠标进入后点击才变色,甚至焦点不在应用上onEntered: {parent.color="red";}onExited: {parent.color="green";}}Text {text: "mouseX:" + mouse.mouseX + " mouseY:" + mouse.mouseY;}
}
- mouseX : real [鼠标x坐标,相对于其父]
- mouseY : real [鼠标y坐标,相对于其父]
- pressed : bool [只读][鼠标按键是否被按住]
- pressedButtons : MouseButtons [只读][按住的按钮]
- preventStealing : bool [这个属性保存是否鼠标事件可以从MouseArea偷来的,默认是false,如果一个MouseArea放在一项过滤孩子鼠标事件,如flickable,鼠标事件可能被盗MouseArea如果手势是由父项的认可,例如滑动手势。如果preventstealing设置为true,没有项目会偷鼠标事件。注意设置preventstealing真正一旦项目开始盗窃事件将不会影响到下一个新闻事件。]
- propagateComposedEvents : bool [这个属性保存是否由鼠标事件会自动传播到其他mouseareas重叠这MouseArea但低视觉堆叠顺序。默认情况下,此属性为false]
信号
- onCanceled()
当鼠标事件被取消时,该调用程序被调用,这是因为事件不被接受,或者是因为另一个项目窃取了鼠标事件处理。这个信号是用于高级用途:它是有用的当有多个MouseArea,处理输入,或出现在flickable个MouseArea。在后一种情况下,如果你执行一些逻辑上的压力信号并开始拖动,鼠标的flickable偷MouseArea处理。在这种情况下,复位逻辑当MouseArea失去了鼠标操作的flickable,onCanceled也要和onReleased一起处理。
- onClicked(MouseEvent mouse)
当单击时,调用这个处理程序。该动作定义为onRelease后触发,内部MouseArea(压、外移MouseArea,然后回到里面和释放也被认为是一个点击)。鼠标参数提供关于单击的信息,包括单击释放的x和y位置,以及单击是否被保留。(注:该鼠标事件参数中的accepted属性被忽略)。
- onDoubleClicked(MouseEvent mouse)
这个处理程序在双击时被调用(一个按下然后一个释放紧跟着一个按钮)。鼠标参数提供关于单击的信息,包括单击释放的x和y位置,以及单击是否被保留。如果鼠标参数接受属性设置为在处理虚假的onPressed / onReleased / onClicked句柄将被称为第二点击;否则被抑制。接受的属性默认为true。
- onEntered()
当鼠标进入鼠标区域时调用这个处理程序。默认情况下,onEntered处理器只叫当按钮被按下才触发。设置hoverEnabled为true时,只要进入鼠标区域就触发onEntered。
- onExited()
当鼠标退出鼠标区域时调用这个处理程序。默认情况下,onExited处理器只叫当按钮被按下。设置hoverEnabled为true时,没有按下鼠标按钮,离开区域会触发onExited。
- onPositionChanged(MouseEvent mouse)
鼠标位置改变时调用这个处理程序。鼠标参数提供有关鼠标的信息,包括x和y位置,以及当前按下的任意按钮。(注:该鼠标事件参数中的accepted属性被忽略)。
默认情况下,onpositionchanged处理器只叫当按钮被按下。设置hoverenabled真正使处理onpositionchanged时没有按下鼠标按钮。
- onPressAndHold(MouseEvent mouse)
长按压时,此处理程序(目前800ms)被调用。鼠标参数提供有关按压的信息,包括新闻的X和Y位置,以及按下哪个按钮。(注:该鼠标事件参数中的accepted属性被忽略)。
- onPressed(MouseEvent mouse)
这个处理程序被调用时,有一个按压。鼠标参数提供有关按压的信息,包括x和y位置以及按下哪个按钮。
该事件的参数接受的属性决定这是否MouseArea将应对媒体和未来所有鼠标事件直到释放。默认是接受事件和不允许其他MouseArea在这一处理事件。如果被设置为false,没有进一步的事件将被发送到这个MouseArea直到按钮下压。
- onReleased(MouseEvent mouse)
当释放时调用这个处理程序。鼠标参数提供关于单击的信息,包括单击释放的x和y位置,以及单击是否被保留。(注:该鼠标事件参数中的accepted属性被忽略)。
- onWheel(WheelEvent wheel)
该处理程序响应鼠标轮和触控板滚动手势。滚轮参数有关事件的信息提供,包括X和Y的位置,按下任何按钮目前,关于滚轮的运动,包括angleDelta和 pixelDelta。
Keys
关于KeyEvent
KeyEvent 代表一个按键事件,如果一个按键被处理, event.accepted 应该被设置为 true 以免它被继续传递;要是不设置它,那它可能会继续传递给其他的 item ,出现一些比较奇葩的现象。
描述
所有可视的原始对象都支持按键处理,按键可以通过onPressed和onRelease信号处理。
属性
- enabled : bool [设置项,默认为true,设置true的时候按键消息会被触发,否则不会被触发,可理解为按键使能]
- forwardTo : list<Object> [此属性提供了将键输入键、键释放和键盘输入从输入方法转发到其他项的方法。当你想要一个Item来处理一些键(例如上下箭头键)和另一个处理其他键的项(例如左右箭头键)时,这一点很有用。一旦被转发的键接受事件,它就不再被转发到列表后面的项目]
Item {ListView {id: list1// ...}ListView {id: list2// ...}Keys.forwardTo: [list1, list2]focus: true
}
- priority : enumeration[这个属性决定了在附加项的键处理之前或之后是否处理这些键。
Keys.BeforeItem(默认)-在正常处理之前处理。如果事件被接受,它将不会被传递到该项。
Keys.AfterItem-在正常处理之后处理。如果项接受键事件,则不会由键附加的属性处理程序处理。
信号
按键有对应信号的则触发对应信号的press,如数字键对应onDeletePressed,如果先响应了onDeletePressed就不会再触发onPressed了,若没有响应onDeletePressed则可以触发onPressed,没有对应信号的就触发onPressed信号,松开始都会触发onRelease信号,有一些组合按键也会触发信号,如onBacktabPressed。总共有39个信号。
长按键,除了几个控制按键(shift、ctrl、atl按下pressed状态可保持),其余的按键会在短暂停顿后变成连续按键(与以往的windows程序不同)。
下面测试按键消息程序(包含所有测试消息),直接赋值粘贴可运行测试
Rectangle {width: 400;height: 400;color: "gray";focus: true;Keys.onAsteriskPressed: console.log("onAsteriskPressed");Keys.onBackPressed: console.log("onBackPressed");Keys.onBacktabPressed: console.log("onBacktabPressed");Keys.onCallPressed: console.log("onCallPressed");Keys.onCancelPressed: console.log("onCancelPressed");Keys.onContext1Pressed: console.log("onContext1Pressed");Keys.onContext2Pressed: console.log("onContext2Pressed");Keys.onContext3Pressed: console.log("onContext3Pressed");Keys.onContext4Pressed: console.log("onContext4Pressed");Keys.onDeletePressed: console.log("onDeletePressed");Keys.onDigit0Pressed: console.log("onDigit0Pressed");Keys.onDigit1Pressed: console.log("onDigit1Pressed");Keys.onDigit2Pressed: console.log("onDigit2Pressed");Keys.onDigit3Pressed: console.log("onDigit3Pressed");Keys.onDigit4Pressed: console.log("onDigit4Pressed");Keys.onDigit5Pressed: console.log("onDigit5Pressed");Keys.onDigit6Pressed: console.log("onDigit6Pressed");Keys.onDigit7Pressed: console.log("onDigit7Pressed");Keys.onDigit8Pressed: console.log("onDigit8Pressed");Keys.onDigit9Pressed: console.log("onDigit9Pressed");Keys.onDownPressed: console.log("onDownPressed");Keys.onEnterPressed: console.log("onEnterPressed");Keys.onEscapePressed: console.log("onEscapePressed");Keys.onFlipPressed: console.log("onFlipPressed");Keys.onHangupPressed: console.log("onHangupPressed");Keys.onLeftPressed: console.log("onLeftPressed");Keys.onMenuPressed: console.log("onMenuPressed");Keys.onNoPressed: console.log("onNoPressed");Keys.onPressed: console.log("onPressed");Keys.onReleased: console.log("onReleased");Keys.onReturnPressed: console.log("onReturnPressed");Keys.onRightPressed: console.log("onRightPressed");Keys.onSelectPressed: console.log("onSelectPressed");Keys.onSpacePressed: console.log("onSpacePressed");Keys.onTabPressed: console.log("onTabPressed");Keys.onUpPressed: console.log("onUpPressed");Keys.onVolumeDownPressed:console.log("onVolumeDownPressed");Keys.onVolumeUpPressed: console.log("onVolumeUpPressed");Keys.onYesPressed: console.log("onYesPressed");
}
- onAsteriskPressed(KeyEvent event) [对应按键“*”]
- onBackPressed(KeyEvent event) [对应按键“*”]
- onBacktabPressed(KeyEvent event) [对应按键“Shift+Tab”]
- onCallPressed(KeyEvent event)
- onCancelPressed(KeyEvent event)
- onContext1Pressed(KeyEvent event)
- onContext2Pressed(KeyEvent event)
- onContext3Pressed(KeyEvent event)
- onContext4Pressed(KeyEvent event)
- onDeletePressed(KeyEvent event) [对应按键“del”]
- onDigit0Pressed(KeyEvent event) [对应按键“0”]
- onDigit1Pressed(KeyEvent event) [对应按键“1”]
- onDigit2Pressed(KeyEvent event) [对应按键“2”]
- onDigit3Pressed(KeyEvent event) [对应按键“3”]
- onDigit4Pressed(KeyEvent event) [对应按键“4”]
- onDigit5Pressed(KeyEvent event) [对应按键“5”]
- onDigit6Pressed(KeyEvent event) [对应按键“6”]
- onDigit7Pressed(KeyEvent event) [对应按键“7”]
- onDigit8Pressed(KeyEvent event) [对应按键“8”]
- onDigit9Pressed(KeyEvent event) [对应按键“9”]
- onDownPressed(KeyEvent event) [对应按键“下”]
- onEnterPressed(KeyEvent event)
- onEscapePressed(KeyEvent event)
- onFlipPressed(KeyEvent event)
- onHangupPressed(KeyEvent event)
- onLeftPressed(KeyEvent event)
- onMenuPressed(KeyEvent event)
- onNoPressed(KeyEvent event)
- onPressed(KeyEvent event) [没有处理对应信号,则所有按键都会触发该信号,否则有预先定义信号并且处理了的,是无法再触发onPressed信号]
- onReleased(KeyEvent event) [对应按键“”]
- onReturnPressed(KeyEvent event)
- onRightPressed(KeyEvent event)
- onSelectPressed(KeyEvent event)
- onSpacePressed(KeyEvent event)
- onTabPressed(KeyEvent event) [对应按键“Tab”]
- onUpPressed(KeyEvent event)
- onVolumeDownPressed(KeyEvent event)
- onVolumeUpPressed(KeyEvent event)
- onYesPressed(KeyEvent event)
原博主博客地址: https://blog.csdn.net/qq21497936
原博主博客导航: https://blog.csdn.net/qq21497936/article/details/102478062
本文章博客地址: https://blog.csdn.net/qq21497936/article/details/78552121
qml开发笔记(七):输入元素鼠标输入MouseArea和键盘输入Keys相关推荐
- python实现键盘自动输入_人生苦短我用Python——模拟鼠标点击和键盘输入的操作...
通过Python可以模拟鼠标点击和键盘输入的操作,进而可以实现一些比较有趣的功能,例如游戏挂机.自动发消息等. 本文以自动发消息为例,实现该功能,通过该代码可以自动往QQ.微信发送任意内容.首先考虑想 ...
- [QML开发笔记]-QML滑屏效果
[QML开发笔记]-QML滑屏效果 QML的SwipeView滑屏控件.PageIndicator翻页指示器控件的功能介绍和使用方法.同样的功能我通过QWidget也进行了实现,可以参考QWidget ...
- python模拟鼠标点击和键盘输入的操作_python模拟鼠标点击和键盘输入的操作
所有代码都是网上百度出来的,通过个人实践找到适合自己的. 采用的python 库是 pymouse.pykeyboard 安装时直接pip安装的,pip install PyUserInput 安装不 ...
- python操作键盘输入中文_python模拟鼠标点击和键盘输入的操作
所有代码都是网上百度出来的,通过个人实践找到适合自己的. 采用的python 库是 pymouse.pykeyboard 安装时直接pip安装的,pip install PyUserInput 安装不 ...
- C语言 在程序中打开网页,模拟鼠标点击、键盘输入
C语言 在程序中打开网页,模拟鼠标点击.键盘输入 一.简述 记--使用C语言 打开指定网页,并模拟鼠标点击.键盘输入.实现半自动填写账号密码,并登录网站(当然现在的大部分网站都有验证码 ...
- python控制鼠标移动并点击_python模拟鼠标点击和键盘输入的操作
所有代码都是网上百度出来的,通过个人实践找到适合自己的. 采用的python 库是pymouse.pykeyboard 安装时直接pip安装的,pip install PyUserInput 安装不成 ...
- python模拟键盘打字_python模拟鼠标点击和键盘输入的操作
所有代码都是网上百度出来的,通过个人实践找到适合自己的. 采用的python 库是 pymouse.pykeyboard 安装时直接pip安装的,pip install PyUserInput 实现了 ...
- python模拟鼠标键盘操作_人生苦短我用Python——模拟鼠标点击和键盘输入的操作...
通过Python可以模拟鼠标点击和键盘输入的操作,进而可以实现一些比较有趣的功能,例如游戏挂机.自动发消息等. 本文以自动发消息为例,实现该功能,通过该代码可以自动往QQ.微信发送任意内容.首先考虑想 ...
- [QML开发笔记]-QML绘制仪表盘
[QML开发笔记]-QML绘制仪表盘 使用QML绘制仪表盘,主要是因为使用QPainter绘制控件绘制习惯了,使用QML也要绘制一个试试.总体感觉,QML绘制起来还是挺方便的,QML自带的仪表盘控件功 ...
最新文章
- [译]Vulkan教程(05)Instance
- 视频码率、视频编码的原理
- 【自动驾驶】16.计算机视觉:相机成像原理:世界坐标系、相机坐标系、图像坐标系、像素坐标系之间的转换
- 关于Xldown和Xlup的用法(Excel VBA)
- 【情感分析】情感分析研究的新视野
- Bitvise SSH Client连接Linux服务器教程和使用
- 从抖音上买计算机教程,抖音直播及购物车-直播后台电脑操作教程
- html背景图片被白色覆盖,html – CSS背景图片淡出白色
- 5.3输入两个正整数m和n,求其最大公约数和最小公倍数。
- java无法找到加载主类是什么意思_java – 什么是“找不到或加载主类”是什么意思?...
- Unity3D 学习 代码
- 微信小程序开发BUG经验总结
- ( “树” 之 BST) 109. 有序链表转换二叉搜索树 ——【Leetcode每日一题】
- c语言动态图形代码 叮当猫,C语言制作图形马赛克处理技术,网友:这小子不进腾讯可惜了!-Go语言中文社区...
- i++和++i的区别,+i+是什么?
- 阿里云oss(图片存储)--fastdfs (视频存储)
- mysql_row是什么类型的_【原创】8. MYSQL++中的Row类型
- 搭建自己的云桌面服务
- ip组播,IGMP协议,PIM协议
- java爬虫系列(四)——动态网页爬虫升级版
热门文章
- 韩国科学家研发透明RRAM存储颗粒
- 破解压缩包的几种方式(zip伪加密 爆破 CRC32碰撞 已知明文攻击)
- codeigniter mysql主键_codeigniter mysql视图与查询
- 论文《A High Spatial Resolution Depth Sensing Method Based on Binocular Structured Light》学习
- 英语学习:连读、失爆、弱读、影子跟读等
- c-语言嵌入式系统,C语言与嵌入式系统-中国大学mooc-题库零氪
- Oracle EBS使用adpatch工具打patch过程
- [转载]三大WEB服务器软件比较(Apache ,Lighttpd,Nginx)对比分析
- HTML在一段文字下加虚线,怎么定义每一行的文字下面都有下划线虚线?_html/css_WEB-ITnose...
- 基于MATLAB的Alexnet迁移学习进行猫狗分类(数据集:Kaggle)