首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QML:按下MouseArea并悬停

QML:按下MouseArea并悬停
EN

Stack Overflow用户
提问于 2013-01-09 06:20:43
回答 1查看 13.3K关注 0票数 5

对于我正在开发的应用程序,我绝对需要一件小事:我必须能够将一个对象拖到另一个对象上,并且至少其中一个对象应该注意到它们是相交的。所以,我的问题是,即使鼠标从外面按下,其中一项也必须接受onEntered信号。

例如:

代码语言:javascript
复制
import QtQuick 1.0

Rectangle{
    id: base
    width: 500
    height: 500
    MouseArea{ //Even without this mousearea I don't get what i want.
        anchors.fill: parent
        //onPressed:{console.log("big")}
    }

    Rectangle{
       id: t
       width: 100
       height: 100
       color: "red"
       MouseArea{
          anchors.fill: parent
          hoverEnabled: true
          onPressed:{console.log("little-press")}
          onEntered:{console.log("little-enter")}
          drag.target: t
       }
     }
}

我想要的是在红色方块外按下鼠标按钮,并在不释放按钮的情况下移动它。当鼠标经过红色矩形时,我希望发出信号onEntered。我不理解为什么不发出它,因为onEntered应该只关心鼠标在mouseArea中的位置,而不是按钮。

你知道怎么做吗?

非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-10 01:40:41

您的代码无法工作,因为此时一个鼠标区域将位于另一个区域之上,鼠标事件将仅由位于顶部的那个鼠标区域获取(直到您修改了窃取属性等)。因此,底部矩形的属性,如hover等将不起作用,因为所有这些事件都将被顶部矩形捕获。

相反,尝试这样做:

代码语言:javascript
复制
import QtQuick 1.0

Rectangle
{
    id: topParent
    width: 500
    height: 500
    color: "grey"


    Rectangle
    {
        id: redRectangle
        color: "red"
        width:  80
        height: 80

        onXChanged:
        {
            if(   redRectangle.x  > greenRectangle.x - redRectangle.width
                  && redRectangle.x  < greenRectangle.x + greenRectangle.width
                  && redRectangle.y  > greenRectangle.y - redRectangle.height
                  && redRectangle.y  < greenRectangle.y + greenRectangle.height

               )

            {
                console.log ( "Red Over Green" )
            }
        }

        MouseArea
        {
          anchors.fill: parent
          drag.target: redRectangle
          drag.axis: Drag.XandYAxis
          drag.minimumX: 0
          drag.maximumX: topParent.width
          drag.minimumY: 0
          drag.maximumY: topParent.height
          onPressed: redRectangle.z = greenRectangle.z + 1
        }
    }

    Rectangle
    {
        id: greenRectangle
        color: "green"
        width: 180
        height: 180

        onXChanged:
        {
            if(   greenRectangle.x  > redRectangle.x - greenRectangle.width
                  && greenRectangle.x  < redRectangle.x + redRectangle.width
                  && greenRectangle.y  > redRectangle.y - greenRectangle.height
                  && greenRectangle.y  < redRectangle.y + redRectangle.height

               )


            {
                console.log ( "Green Over Red" )
            }
        }

        MouseArea
        {
          anchors.fill: parent
          drag.target: greenRectangle
          drag.axis: Drag.XandYAxis
          drag.minimumX: 0
          drag.maximumX: topParent.width
          drag.minimumY: 0
          drag.maximumY: topParent.height
          onPressed: greenRectangle.z = redRectangle.z + 1
        }
    }
}

在我打印信息的地方,你也可以发出信号。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14225033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档