2016-12-30 198 views
0

我想知道ListView是否有任何方式表現得像桌面控件一樣,而不是對滾動鼠標拖動作出反應?如何使QML ListView不可滑動?

我知道interactive屬性,但我仍然希望ListView對點擊,鼠標滾輪,箭頭鍵有反應,並且有ScrollBar

回答

2

對於初學者來說,設置interactivefalse幾乎會使視圖不動。

有一個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用於捕獲輪事件。請注意,您無需執行任何特殊操作即可爲非交互式視圖啓用項目,但無論視圖是否爲交互式,它都可以工作。

+0

謝謝,這幾乎讓我在那裏..唯一 - 點擊代表不起作用,並且「點擊」從未出現在控制檯中。我有Qt 5.8.0 RC。 –

+1

@AlexJenter - 事實上,問題原來是輪子捕捉鼠標區域覆蓋了代表,如果將它放在列表視圖的後面,它會按預期工作。查看答案編輯。 – dtech

+0

這工作,謝謝。找到解決此問題的另一種方法:將wheel-capturing鼠標區域的propagateComposedEvents屬性設置爲「true」。這將有助於避免將其移動到頂層並引用兄弟組件。 –