QML鼠标事件

这篇具有很好参考价值的文章主要介绍了QML鼠标事件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

QML中常用的事件有:

  1. 鼠标事件
  2. 键盘事件
  3. 拖拽事件
  4. 定时器

MouseArea(鼠标区域)

 MouseArea是一个不可见的项目,同、通常用来和一个可见的项目配合使用来为其提供鼠标处理。鼠标处理的逻辑可以包含在MouseArea项目中

常用的属性:

enabled 是否开启鼠标区域(默认为true)

mouseX

mouseY

保存鼠标的位置
acceptedButtons 设置接收的按钮(默认为Qt.LeftButton)
hoverEnabled 是否开启悬停
pressAndHoldInterval  按下并保持的间隔(以毫秒为单位)
pressed 保存是否已按下
pressedButtons 保存按下的按钮(左键,右键,中间键)
scrollGestureEnabled 滚动手势的开启(用于非鼠标设备)
preventStealing  此属性保存鼠标事件是否可能从此鼠标区域被盗
propagateComposedEvents 此属性保存组合鼠标事件是否将自动传播到与此鼠标区域重叠但在可视堆叠顺序中较低的其他鼠标区域。默认情况下,此属性为 false。

常用信号:

canceled() 当鼠标事件被取消时,将发出此信号
clicked(MouseEvent mouse) 当鼠标单击时发出信号
doubleClicked(MouseEvent mouse) 当鼠标双击时发出信号
entered() 鼠标进入鼠标区域时发出信号
exited() 鼠标退出鼠标区域时发出此信号
positionChanged(MouseEvent mouse) 鼠标位置改变时发出该信号
pressAndHold(MouseEvent mouse) 长按(800毫秒)鼠标发出此信号
pressed(MouseEvent mouse) 鼠标按下时发出信号
released(MouseEvent mouse) 鼠标释放时发出信号
wheel(WheelEvent wheel) 此信号是在响应鼠标滚轮和触控板滚动手势时发出的

cursorShape(光标形状)

Qt.ArrowCursor(箭头光标) Qt.BlankCursor
Qt.UpArrowCursor(向上箭头光标) Qt.SplitVCursor
Qt.CrossCursor(十字光标) Qt.SplitHCursor
Qt.WaitCursor(等待光标) Qt.PointingHandCursor
Qt.IBeamCursor(波束光标) Qt.ForbiddenCursor
Qt.SizeVerCursor(版本光标) Qt.WhatsThisCursor
Qt.SizeHorCursor Qt.BusyCursor
Qt.SizeBDiagCursor Qt.OpenHandCursor
Qt.SizeFDiagCursor Qt.ClosedHandCursor
Qt.SizeAllCursor Qt.DragCopyCursor
Qt.DragMoveCursor Qt.DragLinkCursor

点击和释放:

Rectangle{
        width:100
        height: 100
        color: "red"
        MouseArea{
            anchors.fill: parent;//覆盖父类
            onPressed:  {parent.color="green"}//点击时颜色变绿
            onReleased: {parent.color="red"}//释放时颜色变红
        }
    }

点击时变绿:                                                释放时变红:

qml点击自动变色,QML和 Qt Quick,qtqml点击自动变色,QML和 Qt Quick,qt

 鼠标进入和离开:

Rectangle{
        width:100
        height: 100
        color: "red"
        MouseArea{
            anchors.fill: parent;//覆盖父类
            hoverEnabled: true//开启鼠标悬停
            onEntered: {parent.color="blue"}//鼠标进入时颜色变蓝
            onExited: {parent.color="yellow"}//鼠标离开时颜色变黄
        }
    }

 鼠标进入时:                                               鼠标离开时: 

qml点击自动变色,QML和 Qt Quick,qtqml点击自动变色,QML和 Qt Quick,qt

  鼠标在图形中移动:

Rectangle{
        width:100
        height: 100
        color: "red"
        MouseArea{
            anchors.fill: parent;//覆盖父类
            hoverEnabled: true//开启悬停
            onPositionChanged: {//鼠标位置改变时输出位置
                console.log("鼠标的位置:",mouseX,mouseY);//输出鼠标的位置
            }
        }
    }

输出鼠标的位置: 

qml点击自动变色,QML和 Qt Quick,qt

 长按和双击:

Rectangle{
        width:100
        height: 100
        color: "red"
        MouseArea{
            anchors.fill: parent;//覆盖父类
            onDoubleClicked: {
                parent.color="blue"
            }
            onPressAndHold: {
                parent.color="green"
            }
        }
    }

双击:                                                      长按: 

qml点击自动变色,QML和 Qt Quick,qtqml点击自动变色,QML和 Qt Quick,qt

 设置接收的键:

Rectangle{
        width:100
        height: 100
        color: "red"
        MouseArea{
            anchors.fill: parent;//覆盖父类
            acceptedButtons: Qt.LeftButton|Qt.RightButton
            onClicked: {
                if(mouse.button==Qt.LeftButton)
                {
                    console.log("鼠标左键按下")
                }
                else if(mouse.button==Qt.RightButton)
                {
                    console.log("鼠标右键按下")
                }
                else{
                    console.log("其他按键按下")
                }
            }
        }
    }

qml点击自动变色,QML和 Qt Quick,qt

设置组合键 :

Rectangle{
        width:100
        height: 100
        color: "red"
        MouseArea{
            anchors.fill: parent;//覆盖父类
            acceptedButtons: Qt.LeftButton|Qt.RightButton
            onClicked: {
                if((mouse.button==Qt.LeftButton)&&(mouse.modifiers&Qt.ShiftModifier))
                {
                    console.log("左键和Shift键同时按下")
                }
            }

        }
    }

qml点击自动变色,QML和 Qt Quick,qt

 设置鼠标形状:

Rectangle{
        width:100
        height: 100
        color: "red"
        MouseArea{
            anchors.fill: parent;//覆盖父类
            cursorShape:Qt.IBeamCursor
        }
    }

propagateComposedEvents(组合传播事件)

保存组合鼠标事件是否将自动传播到与此鼠标区域重叠但在可视堆叠顺序中较低的其他鼠标区域。默认情况下,此属性为 false。

如果传播复合事件设置为 true,则组合事件将自动传播到场景中同一位置的其他鼠标区域。每个事件都按堆叠顺序传播到其下方的下一个启用的 MouseArea,向下传播此可视层次结构,直到 MouseArea 接受该事件。与事件不同,如果不存在处理程序,则不会自动接受组合事件

 简单的讲就是控件有重复时,点击上层是否会往下执行。

当不开起组合事件传播时:

Rectangle{
        width:100
        height: 100
        color: "red"
        MouseArea{
            anchors.fill: parent;//覆盖父类
            onClicked: {console.log("clicked red")}
        }
        Rectangle{
            color: "blue"
            width: 50
            height: 50
            x:25
            y:25
            MouseArea{
                anchors.fill: parent
                //propagateComposedEvents: true//设置传播事件为true
                onClicked: {
                    console.log("clicked blue")
                    mouse.accepted=false
                }
            }
        }
    }

点击红色区域:                                                         点击蓝色区域

qml点击自动变色,QML和 Qt Quick,qtqml点击自动变色,QML和 Qt Quick,qt

 由此可见,上层执行完并不会往下层运行。

开启组合传播事件:

Rectangle{
        width:100
        height: 100
        color: "red"
        MouseArea{
            anchors.fill: parent;//覆盖父类
            onClicked: {console.log("clicked red")}
        }
        Rectangle{
            color: "blue"
            width: 50
            height: 50
            x:25
            y:25
            MouseArea{
                anchors.fill: parent
                propagateComposedEvents: true//设置传播事件为true
                onClicked: {
                    console.log("clicked blue")
                    mouse.accepted=false
                }
            }
        }
    }

 点击红色区域:                                            点击蓝色区域:

qml点击自动变色,QML和 Qt Quick,qtqml点击自动变色,QML和 Qt Quick,qt

 由此可见,上层的执行完会往下层执行。

鼠标拖拽:

drag.active 拖拽活动
drag.target 拖动目标
drag.axis

拖动轴

Drag.XAxis    水平

Drag.YAxis     竖直

Drag.XAndYAxis    水平和竖直

drag.filterChildren 拖动的filter子项
drag.maximumX 拖动最大的X
drag.maximumY 拖动最大的Y
drag.minimumX 拖动最小的X
drag.minimumY 拖动最小的Y
drag.smoothed 拖动平滑
drag.threshold 拖动阈值

 使用流程:

  • drag.target 设置拖动目标
  • drag.active 指定当前是否正在拖动目标项
  • drag.axis  指定拖动是可以水平 ()、垂直 () 还是两者

拖动矩形:

Rectangle{
        id:rect1
        width:100
        height: 100
        color: "red"
        MouseArea{
            anchors.fill: parent;//覆盖父类
            drag.target: rect1 //指定拖动目标
            drag.axis: Drag.Drag.XAndYAxis //水平和垂直都能拖动
            drag.minimumX:0//设置最小X位置
            drag.minimumY: 0//设置最小Y位置
        }
    }

qml点击自动变色,QML和 Qt Quick,qt

添加子对象:

Rectangle {
        width: 480
        height: 320
        Rectangle {
            id:rect1
            x: 30; y: 30
            width: 300; height: 240
            color: "lightsteelblue"

            MouseArea {
                anchors.fill: parent
                drag.target: parent;
                drag.axis: "XAxis"
                drag.minimumX: 30
                drag.maximumX: 150
                drag.filterChildren: true//添加一个子对象

                Rectangle {
                    color: "yellow"
                    x: 50; y : 50
                    width: 100; height: 100
                    MouseArea {
                        anchors.fill: parent
                        drag.target: parent;
                        drag.axis: "XAxis"
                    }
                }
            }
        }
    }

qml点击自动变色,QML和 Qt Quick,qt

 文章来源地址https://www.toymoban.com/news/detail-806978.html

到了这里,关于QML鼠标事件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Qt6 Qt Quick UI原型学习QML第七篇

    导入 QtQuick 2.12 导入 QtQuick.Window 2.12 导入 QtQuick.Controls 2.12 导入 QtQuick.Layouts 1.3 导入 Qt.labs.calendar 1.0 矩形 { id: root 属性 int duration: 3000 } 这段代码使用了QtQuick库来创建一个用户界面。其中的Rectangle是界面的根元素。 id: root : 为Rectangle元素指定唯一的标识符root。 property int durat

    2024年02月16日
    浏览(39)
  • Qt6 Qt Quick UI原型学习QML第三篇

    图像 Image(图片)元素 解释 这段代码是使用QtQuick 2.0库来创建一个Image(图片)元素的定义。以下是代码的解释: Image 元素是一个用于显示图像的控件。 id: root 是为Image元素指定了一个标识符,以便在代码中引用它。 signal clicked 定义了一个名为 clicked 的信号。信号用于在特

    2024年02月16日
    浏览(49)
  • Qt6 Qt Quick UI Prototype学习QML第一篇

    创建一个具有QML入口点的Qt Quick 2 UI项目。要使用它,您需要设置一个QML运行时环境,例如gmlscene。 仅当您正在进行原型设计时才使用此功能。您无法使用此创建完整的应用程序。请考虑使用Qt Quick application项目 Qt Quick UI原型主要用于快速创建交互式的用户界面(UI)原型。它

    2024年02月16日
    浏览(48)
  • 【Qt 底层之事件驱动系统】深入理解 Qt 事件机制:主事件循环与工作线程的交互探究,包括 QML 的视角

    在探讨 Qt 的世界时,我们不仅是在讨论一种编程框架,更是在探索一种将复杂技术细节隐藏于幕后、让开发者专注于创造性工作的艺术形式。正如著名的计算机科学家 Edsger Dijkstra 所言:“简洁是复杂性的先决条件。” 在这一章节中,我们将探讨 Qt 事件机制的基础概念,这

    2024年02月22日
    浏览(52)
  • QML---鼠标事件与鼠标事件穿透

    QML中MouseArea作为一个界面常用的类型,经常会出现鼠标区域重合的问题,这个时候会触发鼠标事件的只有最上层(可以设置Item的z属性来控制item的z序,而在其下层的鼠标事件则不会触发,但是往往开发者所想的是两个都触发,这个时候就需要鼠标事件穿透了。但是在先穿透之

    2024年02月09日
    浏览(47)
  • 98.qt qml-使用曲线图综合示例、支持多种鼠标交互、支持百万数据显示(已适配黑白风格)

    在上章我们只是简单实现了曲线图和折线图的显示: 79.qt qml-如何在QML中使用QCustomPlot之曲线/折线示例(已适配黑白风格)_qml 折线图_诺谦的博客-CSDN博客 所以本章实现综合示例、并添加多种功能如下所示: 详细显示:鼠标任意移动显示具体值内容 鼠标右击: 弹出菜单栏,支持

    2024年02月05日
    浏览(60)
  • QML鼠标事件

    QML中常用的事件有: 鼠标事件 键盘事件 拖拽事件 定时器  MouseArea是一个不可见的项目,同、通常用来和一个可见的项目配合使用来为其提供鼠标处理。鼠标处理的逻辑可以包含在MouseArea项目中 常用的属性: enabled 是否开启鼠标区域(默认为true) mouseX mouseY 保存鼠标的位置

    2024年01月20日
    浏览(37)
  • QML事件处理之鼠标事件(MouseEvent)和滚轮事件(WheelEvent)

    QtQuick的可视项目结合MouseArea获取鼠标相关事件,并通过信号和处理器与鼠标进行交互。大多数MouseArea的信号都包含了一个mouse参数,它是MouseEvent类型的,例如前面使用的mouse.accepted。在MouseEvent对象中,可以设置accepted属性为true来防止鼠标事件传播到下层的项目;通过x和y属性

    2024年02月11日
    浏览(35)
  • Qt鼠标点击事件处理:显示鼠标点击位置(完整示例)

    Qt 入门实战教程(目录) 前驱文章: Qt Creator 创建 Qt 默认窗口程序(推荐) 事件是对各种应用程序需要知道的由应用程序内部或者外部产生的事情或者动作的通称。 例如点击鼠标,按下按键。 在Qt中使用一个对象来表示一个事件,它继承自QEvent类。 如鼠标事件(例如点击

    2024年02月10日
    浏览(53)
  • qt 禁止点击 屏蔽鼠标事件

    我开了一个线程上传文件夹,用一个进度条显示进度 测试 就在界面随便点击 ,也没有出泵任何控件,没有引发槽函数,直接就崩了! 不知道为什么崩了,所以直接禁止点击,蔽鼠标事件! 主界面 进度条 Qt::WidgetAttribute::WA_TransparentForMouseEvents 该属性的含义是“透明掉鼠标事

    2024年02月15日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包