我希望能够滚动Flickable
使用鼠标滚轮(或触摸板上的两根手指)不改变Slider
s它可能包含。
示例代码及结果应用:
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
}
}
}
}
}
好像有一些尝试解决这个问题 https://codereview.qt-project.org/#/c/124669/过去,但没有成功。
EDIT: 这涉及到Controls 1.x
只是,从2.0版本开始,控件似乎没有这个问题。
您可以放置MouseArea
滑块上的 s 可以窃取鼠标滚轮事件。
像这样的东西:
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
}
}
}
}
}
}
}
使用onWheel
- 将任何滚动转发到的事件ScrollView
。其他鼠标事件,例如单击,可以通过设置转发给父级(在本例中为滑块)mouse.accepted = false;
对于您希望转发的任何鼠标事件。
Edit:哦,我现在刚刚看到您不希望滑块内容发生任何更改。您还可以尝试放置一个MouseArea
遍布ScrollView
并进行同样的转发。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)