zoukankan      html  css  js  c++  java
  • qml 关于鼠标穿透的问题

    最近在开发过程中,遇到了鼠标穿透的问题。结合网上给予的方法,都试了一圈,在这里总结一下:

    import QtQuick 2.9
    import QtQuick.Window 2.2
    import QtQuick.Controls 2.0

    Window {
        visible: true
        640
        height: 480
        title: qsTr("Hello World")
        //flags: Qt.FramelessWindowHint
        Button{
            40
            height:40
            x:200
            y:200
            text:"tab button"

    //        onClicked: {
    //            console.log("tab clicked")
    //        }
    //        onPressed: {
    //            console.log("tab pressed")
    //        }
    //        onReleased: {
    //            console.log("tab released")
    //        }
            MouseArea{
                anchors.fill: parent
                enabled: true
                onClicked: {
                   console.log("tab clicked")
                }
                 onPressed: {
                    console.log("tab pressed")
                 }
                 onReleased: {
                    console.log("tab released")
                   }
            }
        }
        Rectangle{
            id:menu
            100
            height:100
            x:200
            y:200
            color: "transparent"
            MouseArea{
                anchors.fill: parent
                propagateComposedEvents: true
                enabled: true

    //            onClicked: {
    //               console.log("menu.clicked")
    //            }
                onMouseYChanged: {
                    console.log("menu.MouseYChanged")
                }
                onPressed: {
                   console.log("menu.Pressed")
                    mouse.accepted = false

                }
                onReleased: {
                   console.log("menu.released")
                   mouse.accepted = false
                }
            }
        }

    }
    结合网上方法:
    如果想要穿透大概有两种方法。
    如果跟节点是window,就设置Qt.FramelessWindowHint
    如果是Item,就要把上层的mousearea的enable=true
    但是,同样穿透的话。上层的mouseArea的released我试了下,好像无法响应。
    如果不想穿透,原理反之。
    1)enable为false.
    2)不设置Qt.FramelessWindowHint
    3)在上层的mouseArea就把press,released,clicked事件放在那里,就不响应。
    tips:
    将上层的MouseArea的propagateComposedEvents: true,并且把mouse.accepted = false。就只会响应下层的MouseArea的事件。

    关于鼠标响应事件的顺序,基于输入框的:

    https://www.devbean.net/2014/03/qt-study-road-2-qml-input-elements/

  • 相关阅读:
    将vue文件script代码抽取到单独的js文件
    git pull 提示错误:Your local changes to the following files would be overwritten by merge
    vue和uniapp 配置项目基础路径
    XAMPP Access forbidden! Access to the requested directory is only available from the local network.
    postman与newman集成
    postman生成代码段
    Curl命令
    POST方法的Content-type类型
    Selenium Grid 并行的Web测试
    pytorch转ONNX以及TnesorRT的坑
  • 原文地址:https://www.cnblogs.com/wxmwanggood/p/9182665.html
Copyright © 2011-2022 走看看