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()
    }
}
}
Другие вопросы по тегам