如果 MouseArea 在其上方,组合框不会打开弹出窗口
Combobox doesn't open popup if MouseArea is above it
我有一个带有委托的列表视图,其中 MouseArea 覆盖了整个委托。在那个 MouseArea 的 onClick 插槽中,我专门设置了
mouse.accepted = false
但是来自 QtQuick.Controls 1.4 的 Combobox 仍然拒绝在点击时打开其弹出窗口。我已经测试过组合框应该通过以下方式接收点击:
ComboBox {
id: cbChapters
model: chapters
MouseArea {
anchors.fill: parent
onClicked: {
mouse.accepted = false
console.log("arrived")
}
}
}
然后点击事件 do 到达这个内部鼠标区域,似乎只是没有进入组合框本身......可能是什么问题?
回答我自己的问题:
问题似乎是 MouseArea 自动接受 Pressed 事件并且在 Combobox 代码本身中有这个:
onPressed: {
if (!Settings.hasTouchScreen)
popup.toggleShow()
}
onClicked: {
if (Settings.hasTouchScreen)
popup.toggleShow()
}
所以似乎 Clicked 需要 touchscreen 打开弹出窗口(显然桌面上没有)
这只留下 Pressed 打开弹出窗口,但它在最上面的 MouseArea 被抑制,因为它不是组合事件并且 propagateComposedEvents 没有为它做任何事情。
解决方案可能是:
1) 遍历您的鼠标区域链并在每个区域链中设置:
onPressed: {
mouse.accepted = false
}
2) 直接在"clicked" handler
中调用popup
ComboBox {
id: cbChapters
MouseArea {
anchors.fill: parent
propagateComposedEvents: true
onClicked: {
cbChapters.__popup.toggleShow()
}
}
}
我有一个带有委托的列表视图,其中 MouseArea 覆盖了整个委托。在那个 MouseArea 的 onClick 插槽中,我专门设置了
mouse.accepted = false
但是来自 QtQuick.Controls 1.4 的 Combobox 仍然拒绝在点击时打开其弹出窗口。我已经测试过组合框应该通过以下方式接收点击:
ComboBox {
id: cbChapters
model: chapters
MouseArea {
anchors.fill: parent
onClicked: {
mouse.accepted = false
console.log("arrived")
}
}
}
然后点击事件 do 到达这个内部鼠标区域,似乎只是没有进入组合框本身......可能是什么问题?
回答我自己的问题: 问题似乎是 MouseArea 自动接受 Pressed 事件并且在 Combobox 代码本身中有这个:
onPressed: {
if (!Settings.hasTouchScreen)
popup.toggleShow()
}
onClicked: {
if (Settings.hasTouchScreen)
popup.toggleShow()
}
所以似乎 Clicked 需要 touchscreen 打开弹出窗口(显然桌面上没有) 这只留下 Pressed 打开弹出窗口,但它在最上面的 MouseArea 被抑制,因为它不是组合事件并且 propagateComposedEvents 没有为它做任何事情。
解决方案可能是:
1) 遍历您的鼠标区域链并在每个区域链中设置:
onPressed: {
mouse.accepted = false
}
2) 直接在"clicked" handler
中调用popupComboBox {
id: cbChapters
MouseArea {
anchors.fill: parent
propagateComposedEvents: true
onClicked: {
cbChapters.__popup.toggleShow()
}
}
}