Combobox не открывает всплывающее окно, если MouseArea находится над ним
У меня есть просмотр списка с делегатом, у которого MouseArea охватывает весь делегат. В этом слоте MouseArea onClick я специально установил
mouse.accepted = false
но Combobox из QtQuick.Controls 1.4, который живет в этом делегате, по-прежнему отказывается открывать всплывающее окно при щелчках. Я проверял, что выпадающий список должен получать клик с:
ComboBox {
id: cbChapters
model: chapters
MouseArea {
anchors.fill: parent
onClicked: {
mouse.accepted = false
console.log("arrived")
}
}
}
И события щелчка поступают в эту внутреннюю область мыши, но не в сам комбо-бокс, кажется... в чем может быть проблема?
1 ответ
Отвечая на мой собственный вопрос: Кажется, проблема в том, что MouseArea автоматически принимает события Pressed, а в самом коде Combobox есть следующее:
onPressed: {
if (!Settings.hasTouchScreen)
popup.toggleShow()
}
onClicked: {
if (Settings.hasTouchScreen)
popup.toggleShow()
}
Таким образом, похоже, что Clicked требуется сенсорный экран, чтобы открыть всплывающее окно (которого нет на рабочем столе, очевидно). Оставляется только нажатие для открытия всплывающего окна, но оно подавляется в самом верхнем MouseArea, так как это не составное событие, а spreadateComposedEvents ничего не делает для этого.
Решение может быть:
1) пройти через цепочку мышки и в каждом из них установить:
onPressed: {
mouse.accepted = false
}
2) вызывать всплывающее окно прямо в обработчике "нажал"
ComboBox {
id: cbChapters
MouseArea {
anchors.fill: parent
propagateComposedEvents: true
onClicked: {
cbChapters.__popup.toggleShow()
}
}
}