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


相关文章
|
5月前
|
人工智能 编解码 自然语言处理
重磅更新!ModelScope FlowBench 支持视频生成 + 图像编辑,AI创作全面升级!
很高兴地向大家宣布,ModelScope FlowBench 客户端迎来重大功能升级! 本次更新不仅正式支持了视频节点功能,还新增了图像编辑与IC-Light智能打光等实用功能,同时对多个图像处理节点进行了深度优化和扩展。现在,您只需在 FlowBench 中轻松串联节点,即可使用 Wan2.1/Wan2.2、Qwen-Image-Edit、FLUX Kontext、IC-Light等强大模型,轻松实现创意内容的生成与编辑。 无论你是内容创作者、视觉设计师,还是AI技术爱好者,这次更新都将为你打开全新的创作边界。
850 14
|
自然语言处理 搜索推荐 算法
如何利用电商API接口打造个性化购物体验
在数字化时代,电子商务竞争激烈,传统购物体验难以满足消费者的个性化需求。电商平台需通过创新提供定制化服务,而电商API接口作为系统连接的桥梁,提供了强大技术支持。本文探讨如何利用电商API打造个性化购物体验,涵盖其在个性化推荐、定制营销和智能客服等方面的应用,并提出实施策略与未来展望。通过数据收集与分析、算法设计及智能系统建设,电商平台可显著提升用户体验和满意度,推动业务增长。成功案例如亚马逊、淘宝和Zappos展示了个性化服务的巨大潜力,同时也指出了面临的挑战及应对措施。
830 9
|
存储 算法 数据挖掘
重磅发布 | OpenSearch推出向量检索GPU图算法方案并支持GPU规格售卖
OpenSearch向量检索版推出了面向企业开发者的GPU图算法方案(CAGRA算法),支持客户直接购买GPU规格节点,是国内首家支持GPU规格的向量检索产品。
1161 12
|
Web App开发 数据采集 iOS开发
「Python+Dash快速web应用开发」
这是「Python+Dash快速web应用开发」系列教程的第十六期,本期将介绍如何在Dash应用中实现多页面路由功能。通过使用`Location()`组件监听URL变化,并结合回调函数动态渲染不同页面内容,使应用更加模块化和易用。教程包括基础用法、页面重定向及无缝跳转等技巧,并通过实例演示如何构建个人博客网站。
239 2
|
数据采集 监控 安全
厂区地图导航制作:GIS技术与路径导航算法融合
在智能化、数字化时代,GIS技术为厂区的运营管理带来了革命性变化。本文探讨了如何利用GIS技术,通过数据采集、地图绘制、路径规划、位置定位和信息查询等功能,打造高效、精准的智能厂区地图导航系统,提升企业的竞争力和管理水平。
865 0
厂区地图导航制作:GIS技术与路径导航算法融合
|
自然语言处理 数据可视化 搜索推荐
用Python制作酷炫词云图,原来这么简单!
用Python制作酷炫词云图,原来这么简单!
2768 1
|
存储 开发框架 JSON
Winform框架中多语言的处理
Winform框架中多语言的处理
|
存储 缓存 数据可视化
qml开发笔记(五): 可视化元素BorderImage、AnimatedImage、AnimatedSprite、SpriteSequence
qml开发笔记(五): 可视化元素BorderImage、AnimatedImage、AnimatedSprite、SpriteSequence
qml开发笔记(五): 可视化元素BorderImage、AnimatedImage、AnimatedSprite、SpriteSequence
|
算法 程序员 人机交互
【QML 设置颜色】QML中的色彩魔法:从取色器到用户界面
【QML 设置颜色】QML中的色彩魔法:从取色器到用户界面
1260 0
|
监控 安全 Cloud Native
云计算架构设计与实施:构建高效、可扩展的云解决方案
【4月更文挑战第30天】本文探讨了云计算架构的关键要素,包括服务模型(IaaS, PaaS, SaaS)、部署模型(公有云、私有云、混合云)及可扩展性、安全性、可靠性和成本效益。实施策略涉及需求分析、选择云服务商、设计基础设施、自动化、监控和灾备计划。最佳实践推荐模块化设计、微服务、DevOps、CI/CD、多租户支持和云原生应用,以确保高效、安全且成本优化的云环境。
1395 0