原文: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. Java知识补充

    1.SUN,为standford university network 2.java的标志位咖啡,java本意为南美的一种咖啡.因为oak已被注册 3.JDK为java se development ...

  2. 使用JavaScript把页面上的表格导出为Excel文件

    如果在页面上展示了一个数据表格,而用户想把这个表格导出为Excel文件,那么在要求不高的情况下,可以不通过服务器生成表格,而是直接利用JavaScript的Blob和Object URL特性将表格导出 ...

  3. Html网页的代码

    Html网页的代码 很全哦 1)贴图:<img src="图片地址"> 2)加入连接:<a href="所要连接的相关地址">写上你想写 ...

  4. Struts2权威指南笔记

    Struts2权威指南笔记 1.mvc特点包括: ① 多个视图可以对应一个模型 ② 模型返回的数据与显示逻辑分离 ③ 应用层被分隔为三层,降低了各层之间的耦合,提供了应用的可扩展性 ④ 控制层的概念也 ...

  5. css实现三列布局,左右固定值,中间自适应。

    这里主要用到的是position:absolute;及margin属性;代码很简单,一看就明白. <!DOCTYPE html> <html lang="zh_CN&quo ...

  6. 12.hibernate命名查询

    1.创建如下javaweb项目结构 2.在项目的src下创建hibernate.cfg.xml主配置文件 <?xml version="1.0" encoding=" ...

  7. Qt5 OpenGL框架

    #ifndef MYRENDERER_H #define MYRENDERER_H #include <QOpenGLContext> #include <QOpenGLFuncti ...

  8. delphi 集合的用法

    http://blog.sina.com.cn/s/blog_9e2e8405010180jy.html delphi基础补充     1 开域语句     在面向对象的程序代码中,嵌套对象的现象十分 ...

  9. UISwitch 开关控件

    UISwitch iOS中的开关控件,只有两种状态,打开或关闭. aSwitch.tintColor = [UIColor redColor]; //关闭状态下的渲染颜色 aSwitch.onTint ...

  10. AS3.0杂记——Dictionary、Object与Array

    来源:http://blog.csdn.net/m_leonwang/article/details/8811829 Object.Array与Dictionary都是关联数组,就是用“键”来索引存储 ...