Qml实用技巧:在可视元素之前半透明覆盖一个可视元素,阻止鼠标透(界面)传(防止点击到被遮挡的按钮)

简介: Qml实用技巧:在可视元素之前半透明覆盖一个可视元素,阻止鼠标透(界面)传(防止点击到被遮挡的按钮)

需求

       需要一个半遮挡的界面,遮挡住原来的界面,因为把用来被遮挡的界面写成了组件,所以将其设置为需要遮挡的界面的子对象

BUG

       每次点击后面和前面的按钮都可以触发,如下:

Item {
    Rectangle {
        width: 200;
        height: 200;
        color: "yellow";
        Button {
            anchors.top: parent.top;
            text: "bottom";
            onClicked: {
                console.log("onClicked bottom");
            }
        }
        // 本人把遮挡的部分当作组件写成单独的文件了,用的时候当作需要被遮挡的子对象
        Rectangle {
            anchors.fill: parent;
            color: "#80000000"
            Button {
                text:"top";
                anchors.bottom: parent.bottom;
                onClicked: {
                    console.log("onClicked top");
                }
            }
        }
    }
}

图片.png

解决方法一(笔者推荐方法)

       改变MouseArea范围,如下:

Item {
    Rectangle {
        width: 200;
        height: 200;
        color: "yellow";
        Button {
            anchors.top: parent.top;
            text: "bottom";
            onClicked: {
                console.log("onClicked bottom");
            }
        }
        // 本人把遮挡的部分当作组件写成单独的文件了,用的时候当作需要被遮挡的子对象
        Rectangle {
            anchors.fill: parent;
            color: "#80000000"
            MouseArea {                 // 新增代码
                anchors.fill: parent;   // 新增代码
                Button {
                    text:"top";
                    anchors.bottom: parent.bottom;
                    onClicked: {
                        console.log("onClicked top");
                    }
                }
            }                           // 新增代码
        }
    }
}

图片.png

解决方法二

       使底层disable,这里特别要注意,如果父元素被disable那么子元素就会disable(单独设置enable也无效),所以不能使用父子关系

Item {
    Rectangle {
        id: bottomButton;
        width: 200;
        height: 200;
        color: "yellow";
        Button {
            anchors.top: parent.top;
            text: "bottom";
            onClicked: {
                console.log("onClicked bottom");
                bottomButton.enabled = false;
            }
        }
        // 本人把遮挡的部分当作组件写成单独的文件了,用的时候当作需要被遮挡的子对象
    }
    Rectangle {
        anchors.fill: bottomButton;
        color: "#80000000"
//        MouseArea {                 // 新增代码
//            anchors.fill: parent;   // 新增代码
            Button {
                text:"top";
                anchors.bottom: parent.bottom;
                onClicked: {
                    console.log("onClicked top");
                }
            }
//        }                           // 新增代码
    }
}

图片.png






相关文章
|
网络协议 定位技术
网络七层协议地图,报文格式一览无遗。绝对是干货,值得收藏
网络七层协议地图,报文格式一览无遗。绝对是干货,值得收藏
616 0
网络七层协议地图,报文格式一览无遗。绝对是干货,值得收藏
企业文化
企业文化
553 7
QML 界面切换的方法
QML 界面切换的方法
757 1
|
JavaScript 前端开发
QML中的Date将时间戳和指定格式时间互转
QML中的Date将时间戳和指定格式时间互转
287 0
【Qt 学习笔记】Qt常用控件 | 输入类控件 | Spin Box的使用及说明
【Qt 学习笔记】Qt常用控件 | 输入类控件 | Spin Box的使用及说明
911 0
|
JavaScript 前端开发
【前端】解决webstorm执行typescript脚本输出中文乱码问题
【前端】解决webstorm执行typescript脚本输出中文乱码问题
1027 0
|
人工智能 API 调度
大语言模型 LLM 管理功能特点解析
大语言模型领域正快速发展,涵盖技术革新、跨领域应用及行业影响。随着技术进步,更多创新性AI应用和服务涌现。Botnow加速迭代AI应用开发平台,赋能各行各业。新发布的模型管理功能包括模型仓库和模型服务,支持模型文件托管、部署及推理服务,提升使用效率,降低成本。模型服务具备本地推理和接入外部模型的能力,满足中大型企业对大语言模型自主可控的需求。
|
C语言
make的执行步骤以及常见的make命令,make distclean 以及和make clean的区别
make的执行步骤以及常见的make命令,make distclean 以及和make clean的区别
701 0
《QT从基础到进阶·十七》QCursor鼠标的不同位置坐标获取
《QT从基础到进阶·十七》QCursor鼠标的不同位置坐标获取
455 0
|
Windows
QT桌面项目(第一个应用程序 桌面壁纸软件)
QT桌面项目(第一个应用程序 桌面壁纸软件)
243 0