Qml学习——鼠标事件处理MouseArea

最近在学习Qml,但对Qml的各种用法都不太熟悉,总是会搞忘,所以写几篇文章对学习过程中的遇到的东西做一个记录。
学习参考视频:https://www.bilibili.com/video/BV1Ay4y1W7xd?p=1&vd_source=0b527ff208c63f0b1150450fd7023fd8
其他文章:
Qml学习——动态加载控件
Qml学习——控件状态
Qml学习——使用JavaScript
Qml学习——动画
Qml学习——鼠标事件处理MouseArea
Qml学习——布局
Qml学习——基本控件


1 MouseArea

MouseArea是一个处理鼠标事件的项目,它和可见项目是结合使用的。
如以下例程。

import QtQuick 2.12
import QtQuick.Window 2.12

Window {
    visible: true; width: 200; height: 120

    Rectangle {
        width: 30; height: 30; color: 'red'
        MouseArea {
            anchors.fill: parent
            onClicked: console.log('red rect')
        }
    }
    Rectangle {
        width: 30; height: 30; color: 'yellow'
        anchors.right: parent.right
        MouseArea {
            anchors.fill: parent
            onClicked: console.log('yellow rect')
        }
    }
}

请添加图片描述
可以捕捉并处理范围内的鼠标事件。

1.1 拖动控件

import QtQuick 2.12
import QtQuick.Window 2.12

Window {
    visible: true; width: 200; height: 120
    Text {
        text: 'text'
        MouseArea {
            anchors.fill: parent
            drag.target: parent
        }
    }
}

请添加图片描述

1.2 鼠标事件过滤问题

import QtQuick 2.12
import QtQuick.Window 2.12

Window {
    visible: true; width: 200; height: 120

    Rectangle {
        anchors.fill: parent
        MouseArea {
            anchors.fill: parent
            onClicked: console.log('rectangle')
        }

        Text {
            anchors.centerIn: parent
            text: "text"
            MouseArea {
                anchors.fill: parent
                onClicked: console.log('text')
            }
        }
    }
}

请添加图片描述
点击Text时,事件只被触发了一次,原因是Text处理事件时,默认把事件过滤掉了,导致Rectangle无法接收事件,想要让事件不被过滤,可以把代码改成如下所示。

import QtQuick 2.12
import QtQuick.Window 2.12

Window {
    visible: true; width: 200; height: 120

    Rectangle {
        anchors.fill: parent
        MouseArea {
            anchors.fill: parent
            onClicked: console.log('rectangle')
        }

        Text {
            anchors.centerIn: parent
            text: "text"
            MouseArea {
                anchors.fill: parent
                propagateComposedEvents: true
                onClicked: {
                    console.log('text')
                    mouse.accepted = false;
                }
            }
        }
    }
}

请添加图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值