Bonjour,
Je cherche à récupérer la longueur d'intervalle d'un QSlider en pixel sachant que celui-ci peut changer de size (par agrandissement / rétrécissement de la fenêtre parente).
Pourquoi ? Mon but est de pouvoir afficher de petites icônes dans un QWidget situé juste en dessous du QSlider, à une position qui est exactement la même que celle du curseur du QSlider. Autrement dit, à chaque fois que le curseur bouge une image est placée juste en dessous de la position d'avant.
Actuellement, voici ce que je fais mais il y a malheureusement un décalage par rapport au QSlider :
Bien entendu, ici je n'affiche pas des images mais c'est pas important. Les lignes tracées ne coïncident pas exactement avec les Ticks et c'est là le problème !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 // slider est de type QSlider * dans MaClasse void MaClasse::paintEvent(QPaintEvent * event) { QPainter painter(this); QStyleOptionGraphicsItem option; int marge = 11; // Marge entre le bord de slider et le premier Tick du slider, je fournis la valeur car je n'ai pas vu comment l'obtenir directement int pasSlider2 = (slider()->width() - 2 * marge ) / slider()->maximum(); // largeur du slider calculée mais qui me semble pas valide vu le décalage. J'ai retranché les marges de droite et de gauche !! for (int i=0; i<slider()->maximum(); i++) { QGraphicsLineItem line(QLineF(QPointF(marge + i*pasSlider2, (i%2==0 ? 2 : 5)), QPointF(marge+(i+1)*pasSlider2, (i%2==0 ? 2 : 5)))); line.paint(&painter, &option); } }
Merci pour toute aide !






Répondre avec citation






Partager