如果MouseArea在组合框上方,则组合框不会打开弹出窗口

时间:2018-07-07 13:55:39

标签: qt qml qtquickcontrols

我有一个带有委托的列表视图,其中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")
                    }
                }
            }

点击事件进入鼠标内部区域,而不是进入组合框本身,这似乎是什么问题?

1 个答案:

答案 0 :(得分:0)

回答我自己的问题: 问题似乎是MouseArea自动接受 Pressed 事件,而Combobox代码本身包含以下内容:

onPressed: {
    if (!Settings.hasTouchScreen)
        popup.toggleShow()
}
onClicked: {
    if (Settings.hasTouchScreen)
        popup.toggleShow()
}

因此,点击似乎需要触摸屏才能打开弹出窗口(显然,桌面上不存在) 这仅留下 Pressed 来打开弹出窗口,但是由于它不是组合事件,并且在DisplayMouseEvents上不执行任何操作,因此在最上方的MouseArea被抑制。

解决方案可能是:

1)浏览鼠标区域链,并在其中的每个区域中进行设置:

onPressed: {
mouse.accepted = false
}

2)直接在“点击的”处理程序中调用弹出窗口

ComboBox {
id: cbChapters
MouseArea {
    anchors.fill: parent
    propagateComposedEvents: true
    onClicked: {
        cbChapters.__popup.toggleShow()
    }
}
}