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

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

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")
    //flags: Qt.FramelessWindowHint
    Button{
        width: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
        width: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的事件。

qml 关于鼠标穿透的问题的更多相关文章

  1. QML学习笔记(一)-防止鼠标穿透事件

    作者: 狐狸家的鱼 Github: 八至 1.防止鼠标穿透 MouseArea{ anchors.fill: parent; onClicked: {}; onReleased: {}; onPres ...

  2. C# 鼠标穿透窗体功能

    通过以下代码,在窗体启动后调用方法SetPenetrate() 即可实现窗体的穿透功能. 同样该功能需要加载命名空间 using System.Runtime.InteropServices; pri ...

  3. C#使用Windows API实现桌面上的遮罩层(鼠标穿透)

    C#使用Windows API实现桌面上的遮罩层(鼠标穿透) C#实现实现桌面上的遮罩层(鼠标穿透)主要通过一下几个API函数来实现:GetWindowLong,SetWindowLong,SetLa ...

  4. VC++ SetLayeredWindowAttributes 部分窗口透明鼠标穿透

    在初始化中使用下面两行代码 ModifyStyleEx(0, WS_EX_LAYERED); ::SetLayeredWindowAttributes(m_hWnd, RGB(1, 255, 0), ...

  5. qt 窗口鼠标穿透

    Qt 不规则窗体 – 鼠标点击穿透 qt实现鼠标穿透,如果要被穿透窗口只有一层,也即没有嵌套窗口,直接只用对子窗口使用setAttribute (Qt::WA_TransparentForMouseE ...

  6. winform和wpf如何实现鼠标穿透的效果

    先看一下鼠标穿透的效果: 可以看到Form1这个程序虽然遮在了桌面的上面,但是我们还可以在窗体上点击桌面上的必应词典和网易邮箱大师,好像这个叫“Form1”的窗口被“穿透”一样. winform版本: ...

  7. linux下鼠标穿透和取消穿透--linux小白,大神无视

    最近在用qt写一个跨平台的软件,因为设置了无边框,并且我自己给程序窗口加了阴影,阴影范围又比较大 所以必须给阴影区域加上鼠标穿透才能有更好的体验. 上网查了一下,在windows下使用SetWindo ...

  8. C# 鼠标穿透窗体与恢复

    转自原文 C# 鼠标穿透窗体与恢复 引入user32.dll [DllImport("user32.dll")] public static extern uint SetWind ...

  9. Unity UGUI鼠标穿透UI问题(Unity官方的解决方法)

    简述 最近在用UGUI的时候遇到了鼠标穿透的问题,就是说在UGUI和3D场景混合的情况下,点击UI区域同时也会 触发3D中物体的鼠标事件.比如下图中 这里给Cube加了一个鼠标点击改变颜色的代码,如下 ...

随机推荐

  1. Hbase Region Server整体架构

    Region Server的整体架构 本文主要介绍Region的整体架构,后续再慢慢介绍region的各部分具体实现和源码 RegionServer逻辑架构图 RegionServer职责 1.    ...

  2. iPhone X 游戏闪退:NSUnknownKeyException

    目前很多游戏在iPhone X手机 wifi情况下,启动时候闪退,在4G网络时候不闪退. 闪退的log: #0 Thread NSUnknownKeyException [<UIStatusBa ...

  3. [User Defaults] Failed to read values in CFPrefsPlistSource (iOS 10)

    最近遇到一个bug,偶发,后来发现概率还挺高(10%). NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults]; ...

  4. java之继承中的构造方法

    继承中的构造方法  1.子类的构造过程中必须调用其基类的构造方法. 2.子类可以在自己的构造方法中使用super(argument_list)调用基类的构造方法. 2.1.使用this(argumen ...

  5. Jquery编历数组

    <html> <head> <title>编历</title> <script type="text/javascript"& ...

  6. 20145301《Java程序设计》实验二报告:Java面向对象程序设计

    20145301<Java程序设计>实验二报告:Java面向对象程序设计 课程:Java程序设计 实验名称:Java面向对象程序设计 实验目的与要求: 初步掌握单元测试和TDD 理解并掌握 ...

  7. STL学习笔记(不定期更新)

    algorithm *1.sort() 用法:sort(数组名,名+长度(,cmp)); int cmp(T a,T b)//T是要排序的a,b的类型,也可以是结构体中任意成员变量 { return ...

  8. kafka运行错误:提示找不到或者无法加载主类错误解决方法

    kafaka版本:kafka_2.11-1.1.0原因有2个:1  目录不能有空格   D:\Soft\kafka_2.11-1.1.0 , 放在Program Files目录中一直有问题2  修改D ...

  9. this 的理解

    function foo(num){ console.log("foo:",+num); this.count++}foo.count =0for (var i=0; i<1 ...

  10. STL的其他用法(adjacent_find, find_first_of, sort_heap, merge, binary_search)总结

    2017-08-20 17:26:07 writer:pprp 1.adjacent_find() 下面是源码实现: template <class ForwardIterator> Fo ...