Ceci est un problème commun avec les anciens composants QtQuick.Controls 1.x
, qu'ils attrapent avidement les événements de la souris. À ma connaissance, il n'existe aucun moyen officiel d'empêcher cela.
Here vous trouverez une solution, sur la façon de superposer un tel composant (dans ce cas, un Slider
) avec un MouseArea
qui empêche cette mauvaise conduite.
Vous pouvez également utiliser la nouvelle boîte à lettres QtQuick.Controls 2.x
. Comme cela a un look par défaut différent, vous devrez peut-être l'ajuster, pour ressembler (plus) à l'ancien. Here vous pouvez trouver une description sur la façon dont vous pouvez le faire. Rappelez-vous qu'il est facile d'avoir à la fois: QtQuick.Controls 1.x
et QtQuick.Controls 2.x
dans un fichier, en les important avec des alias.
Creuser dans la source du QtQuick.Controls 1.4
, nous pouvons également trouver une solution hacky.
Fichiers pertinents:
On peut voir, un SpinBox
est un Control
. Le SpinBox
a un enfant MouseArea
, qui gère le onWheel
-event. Nous allons désactiver ce MouseArea
. Pour y accéder, nous avons besoin de connaître l'index dans le SpinBox.children
. Nous voyons dans Control
qu'il y a deux Loader
comme enfants (Index 0 et 1). En SpinBox
nous avons deux autres enfants avant les MouseArea
(Index 2 et 3) -> Nous devons donc régler idOfSpinBox.children[4].enabled = false
pour désactiver la sensibilité des roues.
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
}
}
}
ou si nous voulons avoir la molette de défilement activé, lorsque le SpinBox
a été cliquée, nous utilisons:
delegate: SpinBox {
id: spinBox
Component.onCompleted: children[4].enabled = Qt.binding(function() { return spinBox.activeFocus })
}
Mais nous avons besoin de trouver un moyen de perdre cette mise au point.
Votre 'SpinBox' est de QtQuick.Controls 1.x ou 2.x? – derM
J'utilise 'importer QtQuick.Controls 1.4' –