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
            }
        }
    }
}


相关文章
|
Java 应用服务中间件 持续交付
SpringBoot采用Java配置类的方式配置Nacos,动态注册微服务IP
本文是采用Java配置类的方式配置微服务的Nacos服务注册,并动态的配置spring.cloud.discovery.ip属性以打到微服务内网穿透注册至Nacos注册中心。
5114 0
SpringBoot采用Java配置类的方式配置Nacos,动态注册微服务IP
我的Qt作品(3)基于QTabWidget和AdvancedDocking实现的Ribbon风格主界面【开源】
我的Qt作品(3)基于QTabWidget和AdvancedDocking实现的Ribbon风格主界面【开源】
2181 0
我的Qt作品(3)基于QTabWidget和AdvancedDocking实现的Ribbon风格主界面【开源】
|
10月前
|
自然语言处理 搜索推荐 算法
如何利用电商API接口打造个性化购物体验
在数字化时代,电子商务竞争激烈,传统购物体验难以满足消费者的个性化需求。电商平台需通过创新提供定制化服务,而电商API接口作为系统连接的桥梁,提供了强大技术支持。本文探讨如何利用电商API打造个性化购物体验,涵盖其在个性化推荐、定制营销和智能客服等方面的应用,并提出实施策略与未来展望。通过数据收集与分析、算法设计及智能系统建设,电商平台可显著提升用户体验和满意度,推动业务增长。成功案例如亚马逊、淘宝和Zappos展示了个性化服务的巨大潜力,同时也指出了面临的挑战及应对措施。
476 9
|
10月前
|
存储 算法 数据挖掘
重磅发布 | OpenSearch推出向量检索GPU图算法方案并支持GPU规格售卖
OpenSearch向量检索版推出了面向企业开发者的GPU图算法方案(CAGRA算法),支持客户直接购买GPU规格节点,是国内首家支持GPU规格的向量检索产品。
671 12
|
Web App开发 数据采集 iOS开发
「Python+Dash快速web应用开发」
这是「Python+Dash快速web应用开发」系列教程的第十六期,本期将介绍如何在Dash应用中实现多页面路由功能。通过使用`Location()`组件监听URL变化,并结合回调函数动态渲染不同页面内容,使应用更加模块化和易用。教程包括基础用法、页面重定向及无缝跳转等技巧,并通过实例演示如何构建个人博客网站。
177 2
|
自然语言处理 数据可视化 搜索推荐
用Python制作酷炫词云图,原来这么简单!
用Python制作酷炫词云图,原来这么简单!
1700 1
|
存储 开发框架 JSON
Winform框架中多语言的处理
Winform框架中多语言的处理
|
小程序 前端开发 安全
大学生党务学习平台|基于微信小程序实现大学生党务学习平台
大学生党务学习平台|基于微信小程序实现大学生党务学习平台
195 0
【Qt 学习笔记】Qt常用控件 | 显示类控件 | Calendar Widget的使用及说明
【Qt 学习笔记】Qt常用控件 | 显示类控件 | Calendar Widget的使用及说明
783 0
|
数据采集 数据管理 大数据
推荐 | AllData开源数据中台技术分享
AllData数据中台架构师团队全面解析开源项目[alldata](https://github.com/alldatacenter/alldata),涵盖功能设计、架构分析及源码解读。团队分享了项目总结、发展规划,推荐关注公众号“大数据商业驱动引擎”以获取更多信息。他们讨论了数据治理、调度引擎、商业化探索及未来规划,涉及元数据管理、数据安全、Airflow调度引擎等。此外,还介绍了数据平台功能,如用户管理、权限控制,并提到了商业化版本的源码支持。鼓励用户参与社区交流,共同推动项目发展。
推荐 | AllData开源数据中台技术分享