Qml:鼠标事件

简介: Qml:鼠标事件
import QtQuick
import QtQuick.Window
Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Test Mouse")
    Rectangle
    {
        width: 100
        height: 100
        color:"green"
        Text
        {
            text:"测试鼠标点击事件"
        }
        //鼠标响应区域
        MouseArea
        {
            anchors.fill: parent
            设置响应按键,默认是左键,多个按键用|连接
            //Qt.AllButtons
            //Qt.LeftButton
            //Qt.RightButton
            //Qt.MiddleButton
            acceptedButtons: Qt.AllButtons //Qt.LeftButton|Qt.MiddleButton
            /*
            clicked(MouseEvent mouse)
            doubleClicked(MouseEvent mouse)
            pressed(MouseEvent mouse)
            released(MouseEvent mouse)
            */
            onClicked:(mouse)=>
            {
              /*    Qt.LeftButton     0x00000001     0001
                    Qt.RightButton    0x00000002     0010
                    Qt.MiddleButton   0x00000004     0100
              */
                //左键按下事件
                if(mouse.button === Qt.LeftButton)
                {
                    print("LeftButton")
                    //按下左键时右键按住
                    if(mouse.buttons & Qt.RightButton)
                        print("RightButton")
                    //按下左键时右键和中键按住
                    if((mouse.buttons & Qt.RightButton )&&
                       (mouse.buttons & Qt.MiddleButton )
                       )
                    print("RightButton&MiddleButton")
                }
                //当鼠标事件进入时,键盘Ctrl Shift Alt是否按住
                //modifiers : int 同时按下的键盘功能键
                //    Qt.ShiftModifier - A Shift key on the keyboard is pressed.
                //    Qt.ControlModifier - A Ctrl key on the keyboard is pressed.
                //    Qt.AltModifier - An Alt key on the keyboard is pressed.
                //Ctrl+ Alt
                if( (mouse.modifiers & Qt.ControlModifier) &&
                    (mouse.modifiers & Qt.AltModifier)
                   )
                    print("Ctrl + Alt")
                print("onClicked" +
                      " button:" + mouse.button +
                      " buttons:"+ mouse.buttons
                      )
            }
            onDoubleClicked:(mouse)=>
            {
                print("onDoubleClicked")
            }
            onPressed:(mouse)=>
            {
                print("onPressed")
            }
            onReleased:(mouse)=>
            {
                print("onReleased")
            }
            /*onClicked:
            {
                print("MouseArea onClicked")
            }*/
        }
    }
    //测试鼠标移动事件
    Rectangle
    {
        x:120
        width:100
        height:100
        color:"#003300"
        Text {
           text: qsTr("测试鼠标移动事件")
        }
        MouseArea
        {
            hoverEnabled: true //鼠标未按键直接移入
            anchors.fill: parent
            acceptedButtons: Qt.AllButtons
            onEntered:
            {
                //containsMouse 鼠标在MouseArea区域内
                //containsPress 鼠标是否在区域内按下并按住
                print("onEntered "
                      +" containsMouse:" +containsMouse
                      +" containsPress:"+containsPress
                      )
                parent.color = "#00FF00"
            }
            onExited: parent.color = "#003300"
            //鼠标移动 移动就调用
            onPositionChanged:(mouse) =>
            {
                print(containsPress + " " +containsMouse+" "+ mouse.x+":"+mouse.y  )
                //判断按键按下
            }
            onPressAndHold: (mouse) => //按下鼠标按键进入一次
            {
                print("Hold "+mouse.x+":"+mouse.y)
            }
        }
    }
    //鼠标拖动事件
    Rectangle
    {
        id:container
        y:120
        width:  600
        height: 100
        color: "#999999"
        Rectangle
        {
            id:dragrect
            y:25
            width:50
            height:50
            color:"red"
            MouseArea
            {
                anchors.fill: parent
                drag.target: dragrect
                //限制在X轴拖动
                drag.axis: Drag.XAxis
                //限制拖动位置
                drag.minimumX: 0
                drag.maximumX:container.width - parent.width
            }
        }
    }
}


相关文章
|
3月前
QML 界面切换的方法
QML 界面切换的方法
199 1
|
5月前
Qt鼠标事件
Qt鼠标事件
|
5月前
Qml:键盘事件
Qml:键盘事件
|
C++ Windows
Qt-QML-Popup,弹层界面编写
随着接触Qt的时间的增加,也逐渐的发现了Qt 的一些不人信话的一些地方,不由的想起一句话,也不知道是在哪里看到的了“一切变成语言都是垃圾,就C++还可以凑合用”大致意思是这样。最近项目的祝界面框架都基本写完了,那自我感觉良好,感觉自己QML的不得了了,全部用的都是自己YY出来的空间,今天小伙伴在同伴代码后,用到了我的模块,给我说了一个BUG,
533 0
Qt-QML-Popup,弹层界面编写
QT之Qml使用QSystemTrayIcon实现系统托盘
QT之Qml使用QSystemTrayIcon实现系统托盘
从零开始学Pyqt5之【控件介绍】(10):QDialog对话框控件
从零开始学Pyqt5之【控件介绍】(10):QDialog对话框控件
从零开始学Pyqt5之【控件介绍】(10):QDialog对话框控件
Qt | 鼠标事件和滚轮事件 QMouseEvent、QWheelEvent
学习使用Qt的鼠标事件和滚轮事件。
806 0
Qt-QML-隐藏鼠标指针
后面有一段时间需要到甲方爸爸那里去写个程序去,涉及大量界面界面的活,所以呢,得重新学习学习了, 在传统的Widget中,隐藏鼠标是很简单的,只需要一句话就可以了。如下
397 0
Qt-QML-隐藏鼠标指针