如果 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()
    }
}
}