• QML中MouseArea元素的介绍


    原文:http://www.thisisqt.com/?action-viewnews-itemid-22

    MouseArea元素的一个很典型的用法是和一个可视的item一起用,处理这个item的鼠标响应。
    在下例中我们将MouseArea放到Rectangle中,当单击Rectangle区域中时,Rectangle颜色会变成红色。
    import Qt 4.7

     Rectangle {
         100; height: 100
         color: "green"

         MouseArea {
             anchors.fill: parent
             onClicked: { parent.color = 'red' }
         }
     }
    很多时候,MouseArea区域会传递一个鼠标事件作为参数,这个参数中包含了很多鼠标事件信息,例如,
    单击的位置,具体按下的一个鼠标左键还是右键,以及一些键盘按键信息。在下面的例子中,当Rectangle
    区域被右键单击时会触发改变颜色。
    Rectangle {
         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
         600; height: 200

         Rectangle {
             id: rect
             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属性会被忽略不做处理。

  • 相关阅读:
    【转】《基于MFC的OpenGL编程》Part 5 Transformations Rotations, Translations and Scaling
    【转】 《基于MFC的OpenGL编程》Part 10 Texture Mapping
    【转】 《基于MFC的OpenGL编程》Part 11 Blending, Antialiasing and Fog
    win form 托盘功能的实现(引用CSDN)
    C# win form退出窗体时对话框实用
    智能DNS 笔记
    iis无法启动, 找出占用80端口的罪魁祸首
    gvim for windows的剪贴板操作
    内容交换
    Content Networking 读书笔记
  • 原文地址:https://www.cnblogs.com/senior-engineer/p/5628042.html
Copyright © 2020-2023  润新知