MouseArea元素

news2024/12/24 8:11:03

常用信号

  • onClicked,鼠标点击
  • onPressed,鼠标按下
  • onReleased,鼠标释放

 

import QtQuick

Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello World")

    Rectangle{
        id:rect
        width: 100
        height: 100
        color:"red"

        MouseArea
        {
            anchors.fill:parent

            //鼠标点击信号
            onClicked: {
                console.log("鼠标点击")
            }

            //鼠标按下信号
            onPressed:
            {
                console.log("鼠标按下")
            }

            //鼠标释放信号
            onReleased: {
                console.log("鼠标释放")
            }
        }

    }
}

acceptedButtons属性

该属性可以指定触发信号的按钮(默认为左键触发)

//指定左键和右键和滚轮都可以触发信号
acceptedButtons: Qt.LeftButton|Qt.RightButton|Qt.MiddleButton

既然多个键都可以触发信号,那么就需要判断是哪个键按下了

利用pressedButtons属性&对应的按钮

//若返回1,则对应按钮按下,否则返回0
var ret1=pressedButtons&Qt.LeftButton

 

import QtQuick

Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello World")

    Rectangle{
        id:rect
        width: 100
        height: 100
        color:"red"

        MouseArea
        {
            anchors.fill:parent

            //指定可以触发信号的按钮
            acceptedButtons: Qt.LeftButton|Qt.RightButton|Qt.MiddleButton

            //鼠标按下信号
            onPressed:
            {
                //如何区分按下的按钮:利用pressedButtons属性&对应的按钮
                //若返回1,则对应按钮按下,否则返回0
                var ret1=pressedButtons&Qt.LeftButton;
                var ret2=pressedButtons&Qt.RightButton;
                if(ret1)
                {
                    console.log("左键按下");
                }
                if(ret2)
                {
                    console.log("右键按下");
                }
            }
        }

    }
}

ContainsMouse属性和ContainsPress属性

ContainsMouse属性:判断鼠标是否在鼠标区域内

  • 如果hoverEnable属性为false,那么只有鼠标按下,ContainsMouse才会为true
  • 如果hoverEnable属性为true,那么只要鼠标一进入鼠标区域,ContainsMouse就会为true

ContainsPress属性:判断鼠标是否在鼠标区域内且是否按下了

  • ContainsPress属性:判断鼠标是否在鼠标区域内且是否按下了

import QtQuick

Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello World")

    Rectangle{
        id:rect
        width: 100
        height: 100
        color:"red"

        MouseArea
        {
            anchors.fill:parent

            //鼠标只要一进入鼠标区域,ContainsMouse属性就会变为true
            hoverEnabled: true;
            onContainsMouseChanged: {
                console.log("ContainsMouseChanged")
            }
            onContainsPressChanged:
            {
                console.log("ContainsPressChanged")
            }
        }

    }
}

cursorShape属性

可以改变鼠标进入这个鼠标区域内的鼠标形状,有很多种,官方文档里有

import QtQuick

Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello World")

    Rectangle{
        id:rect
        width: 100
        height: 100
        color:"red"

        MouseArea
        {
            anchors.fill:parent

            //将鼠标形状设置为小手
            cursorShape: Qt.PointingHandCursor
        }

    }
}

drag属性

可以设置drag属性,来拖动鼠标区域,从而拖动其父元素

 

 

import QtQuick

Window {
    id:main_window
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello World")

    Rectangle{
        id:rect
        width: 100
        height: 100
        color:"red"

        MouseArea
        {
            anchors.fill:parent

            //拖动属性
            drag.target: rect//拖动谁
            drag.axis: Drag.XAxis//可以沿着x轴方向拖动(也可以沿着y,也可以沿着x和y任意拖动)
            drag.minimumX: 0//X轴方向上可以拖动的范围的最小值
            drag.maximumX: main_window.width-rect.width//X轴方向上可以拖动的范围的最大值

            //若Rectangle里面还有子元素,子元素里也有MouseArea,则子元素的MousArea也继承相关拖动属性
            drag.filterChildren: true
        }

    }
}

mouseX和mouseY属性

可以获取鼠标在鼠标区域内的x值和y值

  • 不开启hoverEnable属性,鼠标按下,mouseX和mouseY的值才会改变
  • 开启hoverEnable属性,鼠标在鼠标区域内移动,mouseX和mouseY的值就会改变

import QtQuick

Window {
    id:main_window
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello World")

    Rectangle{
        id:rect
        width: 100
        height: 100
        color:"red"

        MouseArea
        {
            anchors.fill:parent

            //开始hover属性,只要鼠标在鼠标区域内移动,
            //不需要按下,鼠标的mouseX和mouseY就会改变
            hoverEnabled: true
            onMouseXChanged: {
                console.log("x:",mouseX,"y:",mouseY);
            }

        }

    }
}

onPressAndHold信号和pressAndHoldInterval属性

有时候鼠标长按,才做某些操作

pressAndHoldInterval可以设置这个长按的时长

比如长按2s后,颜色变化

import QtQuick

Window {
    id:main_window
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello World")

    Rectangle{
        id:rect
        width: 100
        height: 100
        color:"red"

        MouseArea
        {
            anchors.fill:parent

            //长按的所需的事件设为2s
            pressAndHoldInterval: 2000
            onPressAndHold: {
                rect.color="green";
            }
        }

    }
}

propagateComposedEvents属性

主要是控制父子元素堆叠时,点击范围较小的子元素,该信号也能够传到父元素的MouseArea

 

import QtQuick

Window {
    id:main_window
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello World")

    Rectangle{
        id:father
        width: 300
        height: 300
        color:"red"

        MouseArea
        {
            anchors.fill:parent
            onClicked: {
                console.log("red clicked");
            }
        }

        Rectangle{
            id:son
            width: 100
            height: 100
            color:"green"
            MouseArea
            {
                anchors.fill:parent

                //为true,信号能够传到父元素的MouseArea
                propagateComposedEvents: true;
                onClicked: (mouse)=>{
                    console.log("green clicked");

                    //还需要mouse的accepted属性置为false,信号才能够传到父元素的MouseArea
                    mouse.accepted=false;
                }
            }

        }

    }
}

 学习链接:https://github.com/0voice

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2139958.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

redis基本数据结构-sorted set

1. sorted set的简单介绍 参考链接:https://mp.weixin.qq.com/s/srkd73bS2n3mjIADLVg72A Redis的Sorted Set(有序集合)是一种数据结构,它是一个不重复的字符串集合,每个元素都有一个对应的分数(score&…

模板方法模式:设计模式中的骨架法则

模板方法模式(Template Method Pattern)是一种行为设计模式,它定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 一,模板方法模式的…

C# HttpListener 实现的HTTP Sever浏览器文件下载

1. 前端页面请求 编写简单的test.html 文件&#xff0c;body体值配置a标签&#xff0c;其href 属性设置为文件下载请求的http接口要求的参数序列。 <!DOCTYPE html><html> <head><meta name"viewport" content"widthdevice-width" …

行业分析---自动驾驶行业的发展

1 背景 进入21世纪以来&#xff0c;自动驾驶行业有着飞速的发展&#xff0c;L2级别的自动驾驶技术也逐渐落地量产到寻常百姓家。不管是起步比较早的特斯拉&#xff0c;还是2015年以后国内的公司&#xff0c;都在逐渐发展自动驾驶技术&#xff0c;并量产给用户使用。 自动驾驶最…

COMDEL电源维修CLX2500康戴尔射频电源维修

美国COMDEL射频电源维修常见型号包括&#xff1a;CLX2750&#xff1b;CLX2500&#xff1b;CLX-600H&#xff1b;CX600AS&#xff1b;CX-5000S&#xff1b;CX-3500S&#xff1b;CX-2500S&#xff1b;CV500&#xff1b;CDX2000等。 Comdel成立于1966年&#xff0c;总部设在马萨诸…

Linux环境基础开发工具使用(gcc/g++与makefile)

1.Linux编译器-gcc/g使用 1. 背景知识 接下来的操作&#xff0c;我以gcc为例&#xff0c;因为两者选项都是通用的&#xff0c;所以也就相当于间接学习了 1.预处理&#xff08;进行宏替换) 2.编译&#xff08;生成汇编) 3.汇编&#xff08;生成机器可识别代码&#xff09;…

革新骨科金属螺丝:TPMS结构助力骨再生研究新突破AbMole

在骨科植入物领域&#xff0c;金属螺丝因其出色的机械强度和生物相容性&#xff0c;一直是骨折固定不可或缺的工具。然而&#xff0c;传统实心设计的金属螺丝常常面临应力遮挡和术后松动的问题&#xff0c;严重影响其长期固定效果。近期&#xff0c;一项由吉林大学第二医院骨科…

第T1周:Tensorflow实现mnist手写数字识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目标&#xff1a; 具体实现&#xff1a; &#xff08;一&#xff09;环境&#xff1a; 语言环境&#xff1a;Python 3.10 编 译 器: PyCharm 框架&#xff1a…

Mixtral 8x7B:开源稀疏混合专家模型的新里程碑

人工智能咨询培训老师叶梓 转载标明出处 随着大模型规模的增大&#xff0c;计算成本和资源消耗也相应增加&#xff0c;这限制了它们的应用范围和效率。本论文介绍了一种新的稀疏混合专家模型&#xff08;SMoE&#xff09;——Mixtral 8x7B&#xff0c;它在保持较小计算成本的同…

【C++】c++ 11

目录 前言 列表初始化 std::initializer_list 右值引用和移动拷贝 左值和右值 左值引用和右值引用的区别 万能引用&#xff08;引用折叠&#xff09; 完美转发 默认成员函数控制 列表初始化 在C98中&#xff0c;标准允许使用花括号{}对数组或者结构体元素进行统一的列…

Gartner 成熟度曲线报告解读(一)| 2024中国IT基础设施使用趋势、影响中国IT使用的4大因素

近些年&#xff0c;面对数字化转型、信息化发展、政策监管与地缘政治等外部因素&#xff0c;以及降本增效的内部需求&#xff0c;不少中国企业在制定 IT 基础设施发展策略时遇到多重挑战。为帮助国内企业用户优化基础设施战略&#xff0c;Gartner 近日发布《中国 IT 基础设施技…

【HCIA-Datacom】华为VRP系统

| &#x1f449;个人主页&#xff1a;Reuuse 希望各位多多支持&#xff01;❀ | &#x1f449;往期博客&#xff1a;网络参考模型 | 最后如果对你们有帮助的话希望有一个大大的赞&#xff01; | ⭐你们的支持是我最大的动力&#xff01;⭐ | 目录 1. 华为VRP系统概述VRP概念设备…

Docker-compose:管理多个容器

Docker-Compose 是 Docker 公司推出的一个开源工具软件&#xff0c;可以管理多个 Docker 容器组成一个应用。用户需要定义一个 YAML 格式的配置文件 docker-compose.yml&#xff0c;写好多个容器之间的调用关系。然后&#xff0c;只要一个命令&#xff0c;就能同时启动/关闭这些…

七、垃圾收集器ParNewCMS与底层三色标记算法详解

文章目录 垃圾收集算法分代收集理论标记-复制算法标记-清除算法标记-整理算法 垃圾收集器1.1 Serial收集器(-XX:UseSerialGC -XX:UseSerialOldGC)1.2 Parallel Scavenge收集器(-XX:UseParallelGC(年轻代),-XX:UseParallelOldGC(老年代))1.3 ParNew收集器(-XX:UseParNewGC)1.4 C…

POSIX信号量以及利用POSIX信号量实现基于循环队列的高效生产者消费者模型

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;Linux从入门到进阶 欢迎大家点赞收藏评论&#x1f60a; 目录 &#x1f341;POSIX信号量 &#x1f341;信号量的相关接口介绍*初始化信号量**销毁信号量**等待信号量**发布信号量* &#x1f341;&…

YOLOv9 简介

YOLO v9 是目前表现最佳的目标检测器之一&#xff0c;被视为现有 YOLO 变体&#xff08;如 YOLO v5、YOLOX 和 YOLO v8&#xff09;的改进版本。 YOLOv9 在实时目标检测领域取得了重大进展&#xff0c;引入了诸如可编程梯度信息&#xff08;PGI&#xff09;和通用高效层聚合网…

后端开发刷题 | 打家劫舍

描述 你是一个经验丰富的小偷&#xff0c;准备偷沿街的一排房间&#xff0c;每个房间都存有一定的现金&#xff0c;为了防止被发现&#xff0c;你不能偷相邻的两家&#xff0c;即&#xff0c;如果偷了第一家&#xff0c;就不能再偷第二家&#xff1b;如果偷了第二家&#xff0…

Dina靶机详解

靶机下载 https://www.vulnhub.com/entry/dina-101,200/ 靶机配置 默认是桥接模式&#xff0c;切换为NAT模式后重启靶机 主机发现 arp-scan -l 端口扫描 nmap -sV -A -T4 192.168.229.157 发现80端口开启&#xff0c;访问 访问网站 目录扫描 python dirsearch.py -u http…

1.2 交换技术

欢迎大家订阅【计算机网络】学习专栏&#xff0c;开启你的计算机网络学习之旅&#xff01; 文章目录 前言一、电路交换1. 定义与原理2. 工作过程3. 优点与局限 二、分组交换1. 定义与原理2. 工作过程3. 优点与局限 三、报文交换1. 定义与原理2. 工作过程3. 优点与局限 四、比较…

改进RRT*的路径规划算法

一、RRT算法 RRT 算法是一种基于随机采样的快速搜索算法。该算法的主要思想是通过随机采样来创建一个快速探索的树&#xff0c;从而生长出一条从起点到终点的路径。如图为随机树的生长过程。 初始化。首先&#xff0c;初始化起始点和目标点位置&#xff0c;并将起点作为根节点…