原文: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元素的介绍的更多相关文章

  1. Matlab中矩阵的平方和矩阵中每个元素的平方介绍

    该文章讲述了Matlab中矩阵的平方和矩阵中每个元素的平方介绍.   设t = [2 4 2 4] 则>> t.^2 ans = 4 164 16 而>> t^2 ans = ...

  2. Elasticsearch:foreach 摄入处理器介绍---处理未知长度数组中的元素

    转载自:https://blog.csdn.net/UbuntuTouch/article/details/108621206 foreach processor 用于处理未知长度数组中的元素.这个有 ...

  3. qt qml中PropertyAnimation的几种使用方法

    qml文章 qt qml中PropertyAnimation的几种使用方法 动画应用场景有以下几种: 首先如果一个Rectangle.动画是要改变它的x和y值 1,Rectangle一旦被创建,就要移 ...

  4. QML中的state 状态

    QML中的状态其实很好理解,任何事物在某一事件都是有一个状态的. 比如你看到的一个窗口,这个时候里面的文字和图片正处于某个状态中.比如一个超链接,你点击了,发现颜色变了,你按了Ctrl+A,整个窗体好 ...

  5. 在 QML 中使用 C++ 类和对象

    Qt Quick 技术的引入,使得你能够快速构建 UI ,具有动画.各种绚丽效果的 UI 都不在话下.但它不是万能的,也有很多局限性,原来 Qt 的一些技术,比如低阶的网络编程如 QTcpSocket ...

  6. Jquery如何获得<iframe>嵌套页面中的元素

    DOM方法:父窗口操作IFRAME:window.frames["iframeSon"].documentIFRAME操作父窗口: window.parent.documentjq ...

  7. 【js】IE、FF、Chrome浏览器中的JS差异介绍

    如何判断浏览器类型 转:http://www.cnblogs.com/carekee/articles/1854674.html 1.通过浏览器特有的对象 如ie 的ActiveXObject  ff ...

  8. ASP.net中的Cache使用介绍

    1.1.1 摘要(http://www.cnblogs.com/rush/archive/2012/06/30/2571438.html) 最近我们的系统面临着严峻性能瓶颈问题,这是由于访问量增加,客 ...

  9. 【.net 深呼吸】在配置节中使用元素集合

    前一篇博文中,老周介绍了自定义配置节的方法,本文咱们再往深一层,再看看如何在自定义的配置节中使用配置元素集合. 前面咱们说过,Configuration Section是特殊的配置元素,它可以包装一类 ...

随机推荐

  1. 奇葩json结构解析--key是数字的json处理

    json结构如下: { "ret": "ok", "data": { "57230": { "cat_id&q ...

  2. NYIST OJ 题目20 吝啬的王国

    DFS水题.题意说明了这是一颗树,那么只要按照根节点DFS下去就好了,DFS的时候记录一下当前在哪个结点,还有父节点是谁,就AC了! #include<cstdio> #include&l ...

  3. 湖南多校对抗赛(2015.05.03)Problem A: Twenty-four point

    给四个数 问能不能算出24点...我的方法比较烂...920ms 差点TLE.应该有更好的方法. #include<stdio.h> #include<string.h> #i ...

  4. 【定位:PDF文件定位关键字所在坐标和页码】

    iText简介: iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成PDF或rtf的文档,而且可以将XML.Html文件 ...

  5. kali Rolling 安装QQ

    ------------------------------------------------------------------- 环境: kali Rolling   64位 所需软件包: Wi ...

  6. notepad 是doc 调出记事本文件

    notepad 是doc 调出记事本文件notepad 是doc 调出记事本文件notepad 是doc 调出记事本文件

  7. 利用ckeditor 富文本编辑插件静态化网页

    // step5: 生成静态化html FileOutputStream fos = null;            PrintStream printStream = null;          ...

  8. JSP+Servlet实现上传下载

    0.项目结构 1.在WebRoot下创建index.jsp页面 <%@ page language="java" import="java.util.*" ...

  9. OMCS开发手册(03) -- 多媒体服务器

    前面我们已经详细介绍了基于OMCS开发网络多媒体应用的客户端程序所必需掌握的内容,现在我们来看一下OMCS服务端的开发.对于使用者而言,OMCS的服务端就非常简单了,只要实现一个用户验证的接口,挂接到 ...

  10. 不创建类将json数据转换

    一般,取到json数据之后,都会将json数据转换为对象,通过属性取得里面的属性值,这样做可以很好地利用vs的智能提示,让开发更轻松,但是代价就是,你需要手动的创建json数据相对应的类. 也有其他方 ...