QML中MouseArea元素的介绍
原文:http://www.thisisqt.com/?action-viewnews-itemid-22
MouseArea元素的一个很典型的用法是和一个可视的item一起用,处理这个item的鼠标响应。
在下例中我们将MouseArea放到Rectangle中,当单击Rectangle区域中时,Rectangle颜色会变成红色。
import Qt 4.7
Rectangle {
width: 100; height: 100
color: "green"
MouseArea {
anchors.fill: parent
onClicked: { parent.color = 'red' }
}
}
很多时候,MouseArea区域会传递一个鼠标事件作为参数,这个参数中包含了很多鼠标事件信息,例如,
单击的位置,具体按下的一个鼠标左键还是右键,以及一些键盘按键信息。在下面的例子中,当Rectangle
区域被右键单击时会触发改变颜色。
Rectangle {
width: 100; height: 100
color: "green"
MouseArea {
anchors.fill: parent
acceptedButtons: Qt.LeftButton | Qt.RightButton
onClicked: {
if (mouse.button == Qt.RightButton)
parent.color = 'blue';
else
parent.color = 'red';
}
}
}
对于其他键盘按键的处理,请参考Keys元素的介绍。
MouseArea是一个可见的item,但它本身并不显示什么。
属性
acceptedButtons : Qt::MouseButtons
表示MouseArea响应的鼠标按键。可取的值有以下三个:
Qt.LeftButton
Qt.RightButton
Qt.MiddleButton
默认值是Qt.LeftButton。acceptButtons属性还可以接受以上三个值的或组合形式,如下例所示:
MouseArea { acceptedButtons: Qt.LeftButton | Qt.RightButton }
containsMouse : bool 只读
containsMouse属性用来表明当前的鼠标是否在MouseArea中。
注意如果当前鼠标时MouseArea中,此时如果移动MouseArea,这个属性不会自动更新,也就是说
containsMouse属性值不会改变。另外如果hoverEnabled为假,只有当鼠标被单击时containsMouse
才是正确的。
drag.target : Item
read-onlydrag.active : bool
drag.axis : enumeration
drag.minimumX : real
drag.maximumX : real
drag.minimumY : real
drag.maximumY : real
drag.filterChildren : bool
drag属性集让item拖动变得很方便。其中drag.target用来指明可以拖动的目标item的id,
drag.active表明目标item当前是否正在被拖动。drag.axis用来说明是否可以水平拖动(Drag.XAxis)
或是垂直拖动(Drag.XAxis)或是两者(Drag.XandYAxis)都允许。drag.minimum和drag.maximum用来
指明可以拖动的最小和最大距离。下面的例子中,Rectangle可以沿着x轴拖动。当拖动到右边的时候
Rectangle的透明度会降低。
Rectangle {
id: container
width: 600; height: 200
Rectangle {
id: rect
width: 50; height: 50
color: "red"
opacity: (600.0 - rect.x) / 600
MouseArea {
anchors.fill: parent
drag.target: rect
drag.axis: Drag.XAxis
drag.minimumX: 0
drag.maximumX: container.width - rect.width
}
}
}
enabled : bool
enabled属性表示item是否接受鼠标事件。默认为真,即接受鼠标事件。
hoverEnabled : bool
hoverEnabled属性表明是否处理鼠标悬停事件。
默认情况下,只处理鼠标的按键事件。如果hoverEnabled属性为真则所有的鼠标事件都会被处理,
即使鼠标没有被按下。这个属性影响containMouse属性,onEntered,onExited以及onPositionChanged信号。
mouseX : real 只读属性
mouseY : real 只读属性
mouseX和mouseY属性是当前鼠标的位置。如果hoverEnabled属性为假则只有当鼠标按下时,mouseX和mouseY属性
才有效。如果hoverEnabled属性为真,则mouseX和mouseY只在下面两种情况下才有效:
1. 没有鼠标按下,但鼠标在MouseArea(containsMouse为真)。
2. 鼠标按下并按住,即使鼠标已经移动到MouseArea之外。
mouseX和mouseY是相对于MouseArea的坐标。
pressed : bool 只读
pressed属性表明当前MouseArea是否按下。
pressedButtons : MouseButtons 只读
顾名思义,pressedButtons表示当前按下的鼠标是哪个键,具体取值如下:
Qt.LeftButton
Qt.RightButton
Qt.MiddleButton
下面的例子中,当单击鼠标右键时会显示字符“right”。
Text {
text: mouseArea.pressedButtons & Qt.RightButton ? "right" : ""
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
MouseArea {
id: mouseArea
anchors.fill: parent
acceptedButtons: Qt.LeftButton | Qt.RightButton
}
}
信号
MouseArea::onCanceled ()
当鼠标事件没有被接受或是被其他元素截获时,MouseArea::onCanceled()会被调用。当有多个MouseArea处理输入时
或是Flickable元素中包含一个MouseArea时,MouseArea::onCanceled()会显得特别重要。如果在Flickable元素中包
含一个MouseArea时,当执行一些针对于按下信号的逻辑处理然后又拖动鼠标时,Flickable会从MouseArea中截获鼠标
事件。在这种情况下,当Flickable截获了MouseArea的鼠标事件时需要重置逻辑。
MouseArea::onClicked ( MouseEvent mouse )
当有单击事件(在MouseArea中按下紧接着弹起)发生时,MouseArea::onClicked方法会被调用。
MouseArea::onDoubleClicked ( MouseEvent mouse )
当有双击事件(按下紧接着弹起然后再按下)发生时调用。在MouseArea::onDoubleClicked中如果将accepted属性设置
为假,则在第二次单击时onPressed、onReleased、onClicked仍会被调用,否则在第二次单击时onPressed、onReleased、
onClicked不会被调用。
MouseArea::onEntered ()
当鼠标进入MouseArea中时,MouseArea::onEntered()会被调用。默认情况下,只有当鼠标在MouseArea中单击时才会调用,
可如果将hoverEnabled设置为真,当鼠标拖动至MouseArea时也会调用onEntered();
MouseArea::onExited ()
当鼠标离开MouseArea中时,MouseArea:: onExited ()会被调用。默认情况下,只有当鼠标在MouseArea中单击时才会调用,
可如果将hoverEnabled设置为真,当鼠标拖动至MouseArea时也会调用onExited ();
MouseArea::onPositionChanged ( MouseEvent mouse )
当鼠标位置发生改变时会调用onPositionChanged,在这个方法中不会考虑MouseEvent参数的accepted属性,也就是说所有的
鼠标事件在这里都会被处理,并不会因为某个鼠标事件被拒绝了而不做处理。默认情况下,只有在鼠标按下时才会调用onPositionChanged。
不过如果将hoverEnabled设置为真,当鼠标移动时onPositionChanged也会被调用。
MouseArea::onPressed ( MouseEvent mouse )
当有鼠标按下时onPressed会被调用。MouseEvent类型的参数提供有关按下时的鼠标信息,包括鼠标的位置以及按下时对应的鼠标按键。
参数mouse的accepted属性决定了MouseArea是否要处理这个鼠标事件。如果mouse的accept属性被设置为假则直到下一个按下事件发生,
这这间任何鼠标事件都不会发送给MouseArea。
MouseArea::onReleased ( MouseEvent mouse )
当有鼠标弹起时会调用onReleased。MouseEvent类型的参数提供有关按下时的鼠标信息,包括鼠标的位置以及按下时对应的鼠标按键。
参数mouse的accepted属性会被忽略不做处理。
QML中MouseArea元素的介绍的更多相关文章
- Matlab中矩阵的平方和矩阵中每个元素的平方介绍
该文章讲述了Matlab中矩阵的平方和矩阵中每个元素的平方介绍. 设t = [2 4 2 4] 则>> t.^2 ans = 4 164 16 而>> t^2 ans = ...
- Elasticsearch:foreach 摄入处理器介绍---处理未知长度数组中的元素
转载自:https://blog.csdn.net/UbuntuTouch/article/details/108621206 foreach processor 用于处理未知长度数组中的元素.这个有 ...
- qt qml中PropertyAnimation的几种使用方法
qml文章 qt qml中PropertyAnimation的几种使用方法 动画应用场景有以下几种: 首先如果一个Rectangle.动画是要改变它的x和y值 1,Rectangle一旦被创建,就要移 ...
- QML中的state 状态
QML中的状态其实很好理解,任何事物在某一事件都是有一个状态的. 比如你看到的一个窗口,这个时候里面的文字和图片正处于某个状态中.比如一个超链接,你点击了,发现颜色变了,你按了Ctrl+A,整个窗体好 ...
- 在 QML 中使用 C++ 类和对象
Qt Quick 技术的引入,使得你能够快速构建 UI ,具有动画.各种绚丽效果的 UI 都不在话下.但它不是万能的,也有很多局限性,原来 Qt 的一些技术,比如低阶的网络编程如 QTcpSocket ...
- Jquery如何获得<iframe>嵌套页面中的元素
DOM方法:父窗口操作IFRAME:window.frames["iframeSon"].documentIFRAME操作父窗口: window.parent.documentjq ...
- 【js】IE、FF、Chrome浏览器中的JS差异介绍
如何判断浏览器类型 转:http://www.cnblogs.com/carekee/articles/1854674.html 1.通过浏览器特有的对象 如ie 的ActiveXObject ff ...
- ASP.net中的Cache使用介绍
1.1.1 摘要(http://www.cnblogs.com/rush/archive/2012/06/30/2571438.html) 最近我们的系统面临着严峻性能瓶颈问题,这是由于访问量增加,客 ...
- 【.net 深呼吸】在配置节中使用元素集合
前一篇博文中,老周介绍了自定义配置节的方法,本文咱们再往深一层,再看看如何在自定义的配置节中使用配置元素集合. 前面咱们说过,Configuration Section是特殊的配置元素,它可以包装一类 ...
随机推荐
- unity 隐藏GameObject的方法(转)
改position,移到视野外,推荐,最节省 gameObject.SetActive (false); //要提前引用,要不你就改不回来了... renderer.enabled = false; ...
- 第一百零二节,JavaScript函数
JavaScript函数 学习要点: 1.函数声明 2.return返回值 3.arguments对象 函数是定义一次但却可以调用或执行任意多次的一段JS代码.函数有时会有参数,即函数被调用时指定了值 ...
- Stack Overflow for web end
Jquery UI tooltip on disabled button In general, disabled elements do not trigger any DOM events. Th ...
- 详解Bootstrap 定义按钮的样式(CSS)
以下样式可用于<a>, <button>, 或 <input> 元素上: 更多关于Bootstrap 定义CSS样式的可查看:http://v2.bootcss.c ...
- java default使用
我们都知道在Java语言的接口中只能定义方法名,而不能包含方法的具体实现代码.接口中定义的方法必须在接口的非抽象子类中实现.下面就是关于接口的一个例子: public interface Simple ...
- OpenCV2.x自学笔记——固定阈值
threshold( const CvArr* src, CvArr* dst, double threshold, double max_value, int threshold_type) ...
- jQuery实例1
1.选择器: <body> <script src="jquery-2.2.4.js"></script> <div id="n ...
- 大规模Schedule任务实现方案
package com.itlong.bjxizhan.support.web.job.base; import com.itlong.bjxizhan.common.DbContext; impor ...
- 离线消息如何实现?-- ESFramework 4.0 快速上手(02)
在ESFramework 4.0 快速上手一文中,主要介绍了如何使用ESPlus.Rapid命名空间中的引擎来快速地构建基于TCP的网络通信系统,即使是使用ESPlus.Rapid来进行ESFrame ...
- digitalocean解释:private networking和user data、IPv6是什么意思
digitalocean vps后台新建droplet的时候,底部会有available settings,里面有四个选项,大多数用户不懂啥意思,我今天解释下: Private Networking ...