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/

  • 相关阅读:
    [Swift]LeetCode1093. 大样本统计 | Statistics from a Large Sample
    [Swift]鸡尾酒排序 | Cocktail Sort
    [Swift]插入排序 | Insertion sort
    [Swift]求最大公约数和最小公倍数
    [Swift]LeetCode1087. 字母切换 | Permutation of Letters
    [Swift]LeetCode1086. 前五科的均分 | High Five
    [Swift]LeetCode1088. 易混淆数 II | Confusing Number II
    [Swift]LeetCode1090. 受标签影响的最大值 | Largest Values From Labels
    [Swift]LeetCode1091. 二进制矩阵中的最短路径 | Shortest Path in Binary Matrix
    [Swift]LeetCode1092. 最短公共超序列 | Shortest Common Supersequence
  • 原文地址:https://www.cnblogs.com/wxmwanggood/p/9182665.html
Copyright © 2011-2022 走看看