Для начала установка interactive
на false
в значительной степени обездвиживает вид.
Недвижимость keyNavigationEnabled
не работает, на данный момент (this critical bug).
Так нужно будет сделать небольшую дополнительную работу, чтобы заставить его работать, как вы хотите:
MouseArea {
anchors.fill: ll
onWheel: ll.flick(0, wheel.angleDelta.y * 5)
}
ListView {
id: ll
model: 50
width: 50
height: 200
spacing: 5
focus: true
interactive: false
boundsBehavior: Flickable.StopAtBounds
Keys.onPressed: {
if (event.key === Qt.Key_Up) flick(0, 500)
else if (event.key === Qt.Key_Down) flick(0, -500)
}
delegate: Rectangle {
width: 50
height: 50
color: "red"
MouseArea {
anchors.fill: parent
onClicked: console.log("clicked")
}
}
}
Интерактивность отключен, клавиша навигации осуществляется вручную, а фон MouseArea
используется для захвата события колеса. Обратите внимание, что вам не нужно делать ничего особенного, чтобы включить щелчок по элементам для неинтерактивного представления, он работает независимо от того, интерактивен или нет.
Спасибо, это почти меня там. Единственное, что щелкнуть по делегату, не работает, и «щелчок» никогда не появляется в консоли. У меня Qt 5.8.0 RC. –
@AlexJenter - на самом деле проблема заключалась в том, что область захвата колесика охватывала делегатов, если вы поместили ее за просмотр списка, она работает так, как ожидалось. См. Редактирование ответа. – dtech
Это работает, спасибо. Найден другой способ решить эту проблему: установите для свойства propateComposedEvents области мыши, захватившей колесо, значение «true». Это поможет избежать перемещения его на верхний уровень и ссылки на отдельный компонент. –