• 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/

  • 相关阅读:
    一次郁闷的项目部署经历
    一道面试题的求解
    一次惨痛的教训
    小地方,大郁闷001
    WPF相对资源的访问
    VS2008安装时提示磁盘空间不够的解决办法
    WPFSlider 控件的使用
    关于asp.net大文件上传和进度条实现的学习(1)
    DataList的一次分页困惑
    关于android的XML的解析
  • 原文地址:https://www.cnblogs.com/wxmwanggood/p/9182665.html
Copyright © 2020-2023  润新知