This is a common problem with the old QtQuick.Controls 1.x components, that they greedily grab the mouse events. To my knowledge, there is no official way to prevent this.
Here you find a solution, on how to overlay a such a component (in this case a Slider) with a MouseArea that prevents that misbehaviour.
Alternatively you might switch to the new QtQuick.Controls 2.x-Spinbox. As this has a different default look, you might need to adjust it, to look (more) similar to the old one. Here you can find a description on how you can do this.
Remember that it is easy to have both: QtQuick.Controls 1.x and QtQuick.Controls 2.x in one file, by importing them with aliases.
Digging into the source of the QtQuick.Controls 1.4 we can find also a hacky solution.
Relevant Files:
We can see, a SpinBox is a Control. The SpinBox has a child MouseArea, which handles the onWheel-event. We're gonna disable this MouseArea. To access it, we need to know the index in the SpinBox.children. We see in Control that there are two Loader as children (Index 0 and 1). In SpinBox we have two other children before the MouseArea (Index 2 and 3) -> So we need to set idOfSpinBox.children[4].enabled = false to disable the wheel-sensitivity.
import QtQuick 2.7
import QtQuick.Controls 1.4
ApplicationWindow {
id: root
visible: true
width: 800
height: 600
ListView {
model: 20
width: 100
height: 200
delegate: SpinBox {
Component.onCompleted: children[4].enabled = false
}
}
}
or if we want to have the scroll wheel enabled, when the SpinBox was clicked, we use:
delegate: SpinBox {
id: spinBox
Component.onCompleted: children[4].enabled = Qt.binding(function() { return spinBox.activeFocus } )
}
But then we need to find some way to lose this focus again.