5

私が開発しているアプリケーションに絶対に必要なことが少しあります。オブジェクトを別のオブジェクトにドラッグできる必要があり、少なくとも1つはそれらが交差していることに気付くはずです。つまり、アイテムの1つは、マウスが外側から押されたときにonEntered信号イベントを受け入れる必要があるということです。

例えば:

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内のマウスビーイングのみを気にする必要があるため、放出されない理由を理解していません。

それを行う方法のアイデアはありますか?

どうもありがとうございます。

4

1 に答える 1

5

現時点では、あるマウス領域が別の領域の上にあるため、コードは機能していません。マウスイベントは、上にあるそのマウス領域によってのみ発生します(スティーリングプロパティなどを変更するまで)。したがって、これらのイベントはすべて上部の長方形によってキャプチャされるため、ホバーなどの下部の長方形のプロパティは機能しません。

代わりにこれを試してください:

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
        }
    }
}

私がメッセージを印刷した場所では、信号を発することもできます。

于 2013-01-09T17:40:41.083 に答える