Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt QML-鼠标earea/鼠标事件问题_Qt_Mouse_Mouseevent_Qml_Qtquick2 - Fatal编程技术网

Qt QML-鼠标earea/鼠标事件问题

Qt QML-鼠标earea/鼠标事件问题,qt,mouse,mouseevent,qml,qtquick2,Qt,Mouse,Mouseevent,Qml,Qtquick2,下面的代码生成一个白色矩形,其中包含一个红色矩形和一个灰色矩形。每个矩形都有一个关联的MouseArea。在灰色矩形内单击鼠标时,该矩形将变为蓝色。红色矩形在鼠标光标进入时打印控制台消息,在释放信号时打印另一条消息 我想: 在灰色矩形内按住鼠标按钮(变为蓝色) 将光标移到灰色/蓝色矩形外,然后移到红色矩形内,而不释放按钮并捕获红色矩形的输入信号 释放按钮,使光标位于红色矩形内,并捕获红色矩形的释放信号 可能吗?对于当前代码,只有在输入时未按下mopuse按钮时,才会发出红色矩形的输入信号,只有在

下面的代码生成一个白色矩形,其中包含一个红色矩形和一个灰色矩形。每个矩形都有一个关联的MouseArea。在灰色矩形内单击鼠标时,该矩形将变为蓝色。红色矩形在鼠标光标进入时打印控制台消息,在释放信号时打印另一条消息

我想:

  • 在灰色矩形内按住鼠标按钮(变为蓝色)
  • 将光标移到灰色/蓝色矩形外,然后移到红色矩形内,而不释放按钮并捕获红色矩形的输入信号
  • 释放按钮,使光标位于红色矩形内,并捕获红色矩形的释放信号
  • 可能吗?对于当前代码,只有在输入时未按下mopuse按钮时,才会发出红色矩形的输入信号,只有在该矩形内按下按钮时,才会发出释放信号。显然,问题在于,如果按下按钮,灰色/蓝色矩形将控制鼠标事件

    这是一个类似但简化的场景,与我正在开发的应用程序中的场景类似

    import QtQuick 2.0
    
    Rectangle{
        color: "white"
        height: 210
        width: 500
    
        MouseArea{
          id: mainMa
          anchors.fill: parent
          hoverEnabled: true
          onReleased:{console.log("white-released")}
       }
    
       Column{
           spacing: 10
           Rectangle{
               color: "red"
               height: 100
               width: 500
              MouseArea{
                 anchors.fill: parent
                 hoverEnabled: true
                 propagateComposedEvents: true
                 onEntered:{console.log("red-enter")}
                 onReleased:{console.log("red-released")}
              }
           }
    
           Rectangle{
               color: "#666666"
               height: 100
               width: 500
               MouseArea{
                   id: ma
                   anchors.fill: parent
                   hoverEnabled: true
                   onPressed: {parent.color = "blue"; console.log("grey pressed")}
                   onReleased: {parent.color = "#666666"; console.log("grey released")}
               }
           }
       }
    

    }我想您需要拖放操作。为此,在红色矩形中添加DropArea,并在灰色矩形中进行活动拖动

    类似的内容(最小代码):

    如果不想移动灰色矩形,可以添加不可见的可拖动项:

        MouseArea {
        id: mousearea
        anchors.fill: parent
        onReleased: dargItem.Drag.drop()
        drag.target: dargItem
        Item {
            id: dargItem
            x: mousearea.mouseX
            y: mousearea.mouseY
            width: 1; height: 1
            Drag.active: mousearea.drag.active
            Drag.hotSpot.x: 1
            Drag.hotSpot.y: 1
        }                    
    }
    

    谢谢你,纪尧姆!事实上,我不想移动灰色矩形,所以“第二个解决方案”是被选中的一个!
        MouseArea {
        id: mousearea
        anchors.fill: parent
        onReleased: dargItem.Drag.drop()
        drag.target: dargItem
        Item {
            id: dargItem
            x: mousearea.mouseX
            y: mousearea.mouseY
            width: 1; height: 1
            Drag.active: mousearea.drag.active
            Drag.hotSpot.x: 1
            Drag.hotSpot.y: 1
        }                    
    }