禁用 QML Slider 的鼠标滚轮

rsh*_*sht 3 qt qml qtquick2 qtquickcontrols

我希望能够Flickable使用鼠标滚轮(或触摸板上的两根手指)滚动,而不更改它可能包含的Slider内容

示例代码及结果应用:

import QtQuick 2.7
import QtQuick.Window 2.2
import QtQuick.Controls 1.4

ApplicationWindow {
    id: rootWindow

    visible: true
    width: 400
    height: 200
    title: qsTr("Hello World")

    ScrollView {
        anchors.fill: parent
        flickableItem.flickableDirection: Flickable.VerticalFlick

        Column {
            Repeater {
                model: 40
                Slider {
                    width: rootWindow.width * 0.9
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

结果申请

看起来过去曾尝试修复此问题,但没有成功。

编辑:这仅涉及Controls 1.x,因为从 2.0 版本开始,控件似乎没有这个问题。

DuK*_*0mE 5

您可以放置MouseAreas 放在滑块上来窃取鼠标滚轮事件。

像这样的东西:

import QtQuick 2.7
import QtQuick.Window 2.2
import QtQuick.Controls 1.4

ApplicationWindow {
    id: rootWindow

    visible: true
    width: 400
    height: 200
    title: qsTr("Hello World")

    ScrollView {
        id: _scrollview
        anchors.fill: parent
        flickableItem.flickableDirection: Flickable.VerticalFlick

        Column {
            Repeater {
                model: 40
                Slider {
                    width: rootWindow.width * 0.9
                    property int scrollValue: 10

                    MouseArea {
                            anchors.fill: parent
                            onWheel: {
                                //check if mouse is scrolling up or down
                                if (wheel.angleDelta.y<0){
                                    //make sure not to scroll too far
                                    if (!_scrollview.flickableItem.atYEnd)
                                            _scrollview.flickableItem.contentY += scrollValue
                                }
                                else {
                                    //make sure not to scroll too far
                                    if (!_scrollview.flickableItem.atYBeginning)
                                    _scrollview.flickableItem.contentY -= scrollValue
                                }
                            }
                            onPressed: {
                                // forward mouse event
                                mouse.accepted = false
                            }
                            onReleased: {
                                // forward mouse event
                                mouse.accepted = false
                            }
                    }
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

使用onWheel- 事件将任何滚动转发到ScrollView. 其他鼠标事件,例如单击,可以通过设置转发给父级(在本例中为滑块)mouse.accepted = false;通过设置您希望转发的任何

编辑:哦,我现在刚刚看到您不希望滑块内容发生任何更改。您还可以尝试放置MouseArea所有内容ScrollView并执行相同的转发。