gpt4 book ai didi

qt - QML - MouseArea/MouseEvent 问题

转载 作者:行者123 更新时间:2023-12-04 14:48:48 26 4
gpt4 key购买 nike

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

我愿意:

  1. 在灰色矩形(变为蓝色)内按住鼠标按钮
  2. 将光标移到灰色/蓝色矩形外,然后移到红色矩形内,不松开按钮并捕获红色矩形的输入信号
  3. 释放光标在红色矩形内的按钮,并捕获红色矩形的释放信号。

这可能吗?使用当前代码,只有在输入时未按下鼠标按钮时才会发出红色矩形的输入信号,并且只有在该矩形内按下按钮时才会发出释放信号。显然,问题在于如果按下按钮,灰色/蓝色矩形会控制鼠标事件。

这是一个与我正在开发的应用程序中遇到的场景类似但经过简化的场景。

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 并在灰色矩形中添加事件拖动

类似的东西(最少的代码):

Rectangle {
Column {
Rectangle {
id: redRect
DropArea {
anchors.fill: parent
onEntered: { console.log("red-enter") }
onDropped: { console.log("red-released") }
}
}
Rectangle {
id: greyRect
Drag.active: mousearea.drag.active
Drag.hotSpot.x: mousearea.mouseX
Drag.hotSpot.y: mousearea.mouseY
MouseArea {
id: mousearea
anchors.fill: parent
onReleased: parent.Drag.drop()
drag.target: parent
}
}
}
}

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

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

关于qt - QML - MouseArea/MouseEvent 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19032143/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com