这是一个包含当前代码形式
的代码段Rectangle
{
id: menu
GridLayout
{
id: layout
columns: 4
rows: 3
Repeater
{
model: ListModel {}
ToolButton {}
}
Rectangle
{
x: -3
y: -33
width: menu.width - 2
height: menu.height + 33
border.color: "red"
border.width: 3
color: "blue"
MouseArea
{
x: mapToItem(menu, -5, -35).x
y: mapToItem(menu, -5, -35).y
width: menu.width
height: menu.height + 35
hoverEnabled: true
preventStealing: true
onEntered:console.log("onEntered")
onExited:console.log("onExited menu mous area")
}
}
}
}
MouseArea
悬停事件向下传播到ToolButtons
中的layout
。我不明白为什么。因此,onEntered
和onExited
事件无法正常工作,因为当onExited
' MouseArea
时ToolButtons
内发生了MouseArea
悬停' 并显示工具提示。最后,我需要Rectangle
比其父onExited
更宽更长,这样一旦发出menu
,Rectangle
就会变得不可见。使用{{1}}进行测试成功后,生成C ++类型的Polygon是有意义的。
答案 0 :(得分:0)
在您的示例中,onExited
必须在输入ToolButton
时发出。根据{{3}}:
Rectangle {
width: 400; height: 400
MouseArea {
id: mouseArea1
anchors.fill: parent
hoverEnabled: true
}
MouseArea {
id: mouseArea2
width: 100; height: 100
anchors.centerIn: parent
hoverEnabled: true
}
}
将鼠标从
mouseArea2
移至mouseArea1
将导致mouseArea1
发出已退出的信号。
如果您不希望发出exited
信号,
如果您将两个MouseAreas设为父子关系,则将鼠标从
mouseArea2
移至mouseArea1
将不会导致mouseArea1
退出。相反,他们都被认为是同时徘徊。
也就是说,将ToolButton
(和所有相关组件)放在MouseArea
中。例如,
Rectangle {
id: menu
Rectangle {
//some properties
MouseArea {
hoverEnabled: true
//some properties
onEntered:console.log("onEntered")
onExited:console.log("onExited menu mous area")
GridLayout {
id: layout
Repeater {
ToolButton {}
}
}
}
}
}