0
我想知道ListView
是否有任何方式表現得像桌面控件一樣,而不是對滾動鼠標拖動作出反應?如何使QML ListView不可滑動?
我知道interactive
屬性,但我仍然希望ListView
對點擊,鼠標滾輪,箭頭鍵有反應,並且有ScrollBar
。
我想知道ListView
是否有任何方式表現得像桌面控件一樣,而不是對滾動鼠標拖動作出反應?如何使QML ListView不可滑動?
我知道interactive
屬性,但我仍然希望ListView
對點擊,鼠標滾輪,箭頭鍵有反應,並且有ScrollBar
。
對於初學者來說,設置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
這工作,謝謝。找到解決此問題的另一種方法:將wheel-capturing鼠標區域的propagateComposedEvents屬性設置爲「true」。這將有助於避免將其移動到頂層並引用兄弟組件。 –