|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Nouveau Membre du Club
![]() Inscription : juillet 2009 Messages : 49 ![]() |
Lorsqu'on utilise les touches haut et bas du clavier pour changer la valeur d'un QSpinBox, la valeur augmente de singleStep(). Y a t'il une option du QSpinBox de telle manière d'augmenter la valeur d'incrémentation lorsqu'on appuie sur shift en même temps ? (Ex: multiplié par 10 l'incrément)
|
|
|
00
|
|
|
#2 | |
![]() ![]() Yoann MoreauIngénieur en laboratoire de recherche Inscription : septembre 2005 Messages : 724 ![]() |
Selon la doc on peut modifier le comportement de l'incrémentation en surchargeant cette fonction virtuelle http://qt.developpez.com/doc/4.7/qab...pinbox/#stepby
Et elle semble déjà avoir un comportement par défaut qui peut varier selon les touches : Citation:
Si jamais tu ne tiens pas spécialement à utiliser shift et que les touches de page te conviennent, alors ta spinbox est déjà capable de faire des sauts de 10 incréments. Sinon pour ce que tu souhaites faire, il semblerait qu'il faille plutôt changer dans QAbstractSpinBox l'appel à cette fonction et pas la fonction elle même. Pour ça il va falloir regarder du côté des fonctions keyPressEvent et keyReleaseEvent. http://qt.developpez.com/doc/4.7/qab...cted-functions Il faudra voir le code source de QAbstractSpinBox et le reprendre à ta sauce pour détecter d'autres touches clavier en plus, et appeler stepBy avec le nombre d'incréments voulus. |
|
|
00
|
|
|
#3 |
|
Nouveau Membre du Club
![]() Inscription : juillet 2009 Messages : 49 ![]() |
J'ai surclassé QSpinBox et j'ai surchargé la méthode keyPressEvent. Je regarde si le modificateur shift est activé, si oui j'appelle setValue(singleStep() * 10).
Si je veux avoir le même comportement avec un QDoubleSpinBox, il faut que je fasse la même chose. J'écris donc deux fois la même code. Supposons que maintenant je veux faire la même chose sur un slider ... Mais cela veut dire qu'au lieu d'instancier un QSpinBox je dois instancier mon objet avec ma nouvelle classe. Y'a t'il un moyen d'appliquer ce comportement à tout les objets de type QAbstractSpinBox de mon application sachant qu'il y en a un certain nombre sans à changer toutes les instanciations ? A quoi correspond la touch Key_Prior ? |
|
|
00
|
|
|
#4 | |
![]() ![]() Yoann MoreauIngénieur en laboratoire de recherche Inscription : septembre 2005 Messages : 724 ![]() |
Key_prior est à mon avis une erreur qui n'a pas été mise à jour dans la doc. Dans la doc Qt3 on retrouve cette valeur :
Citation:
Pour ton implémentation, le réflexe POO serait de centraliser ta fonction surchargée dans une classe héritant de QAbstractSpinBox. Et de faire hériter tous les widgets concernés par cette classe fille et pas QAbstractSpinBox. Sauf qu'on a pas la main sur les classes Qt, on ne peut pas "insérer" une classe à nous dans l'arborescence d'héritage Qt. Mais j'ai peut être mal compris, c'est la création des objets qui te pose problème ? On peut indiquer dans QtDesigner d'utiliser une classe à nous dérivant d'un widget plutôt que la classe standard du widget, mais il faut faire ça un par un... Si c'est dans le code, je ne vois qu'un bon vieux chercher/remplacer. |
|
|
00
|
|
|
#5 |
|
Nouveau Membre du Club
![]() Inscription : juillet 2009 Messages : 49 ![]() |
J'envisage en fait d'installer un eventfilter sur l'objet QApplication pour ajouter ce comportement à tout les QAbstractSpinBox de mon application
|
|
|
10
|
|
|
#6 |
![]() ![]() Yoann MoreauIngénieur en laboratoire de recherche Inscription : septembre 2005 Messages : 724 ![]() |
Je n'ai jamais manipulé ça mais en effet ça semble faire ce dont tu as besoin. N'hésite pas à poster ta solution !
|
|
00
|
|
|
#7 | ||
|
Nouveau Membre du Club
![]() Inscription : juillet 2009 Messages : 49 ![]() |
Code :
|
||
|
|
10
|
Copyright © 2000-2012 - www.developpez.com