2016-08-19 1 views
0

Я хочу создать элемент QML, который исчезает, когда мышь перемещается за его пределы. Вот мой код:Поймать события мыши из QML

Item { 
    id: disappearing_element 

    ListView { ... } 

    MouseArea { 
    id: collapser 
    anchors.fill: parent 
    propagateComposedEvents: true 
    hoverEnabled: true 

    onExited: { 
     disappearing_element.visible = false 
    } 
    } 
} 

Он хорошо работает, но MouseArea распространяется события, как только onClicked()onDoubleClicked() (как сказано в Qt документации).

Есть ли способ уведомить детей disappearing_element о событиях ввода мыши и мыши (без использования элемента Popup)?

+0

Вы можете использовать 'исчезающий_element.visible' для уведомлений для детей путем привязки к нему, т. Е.' Свойство bool someProp: parent.visible; onSomePropChanged: {... ваши вещи ...} ' – dtech

+0

Вы меня неправильно поняли. Я хочу распространять MouseEvent на дочерние элементы 'исчезающих_элементов', чтобы проверить, содержит ли один из них указатель мыши или нет. –

+0

Вы пытались использовать функцию 'Item itemAt (int x, int y)' 'ListView'? – dtech

ответ

0

Я думаю, что это одна из распространенных потребностей при разработке приложений QtQuick. Одним из решений, которое мы в настоящее время используем довольно часто, является добавление MouseArea в каждый из дочерних элементов, которые нуждаются в контрольной оболочке мыши, и излучают сигналы (и захватывают эти сигналы в вашем основном элементе), когда мышь входит или выходит.

Вещи идут немного сложнее, когда детские предметы также нуждаются в таком механизме для управления своими детьми. Однако для общего использования этот подход достаточно для нас прямо сейчас.