• QML笔记——MouseArea的覆盖区域


    问题摘要

    初学QML,今天发现一个奇怪的现象,调用MouseArea的位置不同,结果不同。

    1、一个简单的qml示例

    Rectangle {
        id: root
         320
        height: 200
        Button{
            anchors.centerIn:parent;
            text:"Quit";
            style:ButtonStyle{
                background:Rectangle{
                    implicitWidth:170;
                    implicitHeight:50;
                    border.control.pressed ? 5 : 1;
                    border.color:(control.hovered||control.pressed) ? "green" :"red";
                }
            }
            onClicked:{
                console.log("Quit");
                //Qt.quit()
            }
        }
    }

          正常效果如下:  

           

    2、  添加MouseArea对象

    Rectangle {
        id: root
         320
        height: 200
        Button{
            anchors.centerIn:parent;
            text:"Quit";
            style:ButtonStyle{
                background:Rectangle{
                    implicitWidth:170;
                    implicitHeight:50;
                    border.control.pressed ? 5 : 1;
                    border.color:(control.hovered||control.pressed) ? "green" :"red";
                }
            }
            onClicked:{
                console.log("Quit");
                //Qt.quit()
            }
        }
    
        MouseArea{
            anchors.fill:parent;
            acceptedButtons: Qt.LeftButton | Qt.RightButton 
            onDoubleClicked:{
                console.log("DoubleButton");
            }
            onClicked:{
                if(mouse.button == Qt.LeftButton){
                    console.log("LeftButton");
                }else if(mouse.button == Qt.RightButton){
                    console.log("RightButton");
                    Qt.quit();
                }
            }
        }
    }

        左键点击Quit 按钮没有反应:按钮宽度没有变化,不会输出console.log("Quit");   而输出console.log("LeftButton")。

        

    3、调换MouseArea位置:

    Rectangle {
        id: root
         320
        height: 200
    
        MouseArea{
            anchors.fill:parent;
            acceptedButtons: Qt.LeftButton | Qt.RightButton 
            onDoubleClicked:{
                console.log("DoubleButton");
            }
            onClicked:{
                if(mouse.button == Qt.LeftButton){
                    console.log("LeftButton");
                }else if(mouse.button == Qt.RightButton){
                    console.log("RightButton");
                    Qt.quit();
                }
            }
        }
        
        Button{
            anchors.centerIn:parent;
            text:"Quit";
            style:ButtonStyle{
                background:Rectangle{
                    implicitWidth:170;
                    implicitHeight:50;
                    border.control.pressed ? 5 : 1;
                    border.color:(control.hovered||control.pressed) ? "green" :"red";
                }
            }
            onClicked:{
                console.log("Quit");
                //Qt.quit()
            }
        }
    }

        Quit按钮可以正常反应:

         

     总结

      MouseArea的调用,有先后优先级,后续的设置会覆盖前面的设置。局部的调用没有被触发。
  • 相关阅读:
    1774:大逃杀
    Angular实现简单数据计算与删除
    IDEA 如何搭建maven 安装、下载、配置(图文)
    win10 Java JDK环境变量配置
    Nginx学习使用
    ASP.NET Core中返回 json 数据首字母大小写问题
    mysql使用遇到的问题
    线程同步以及AutoResetEvent
    Device Class
    Xamarin.Forms之布局压缩
  • 原文地址:https://www.cnblogs.com/daiker/p/QML_MouseArea.html
Copyright © 2020-2023  润新知