Bonjour,
Tout est dans le titre ! Est-ce que quelqu'un parmis vous à déjà eu ce problème ? J'explique :
- J'ai une classe "Ligne" qui hérite de QPolygonItem.
- J'ai une autre classe "Dessin" dans laquelle je gère une QGraphicsView perso et une QGraphicsScene perso aussi !
- Dans la classe "Dessin" j'ai créer une fonction zoom() qui applique des scale() à la vue !
Jusque là pas de problème ! Enfin, il y en a eu mais ils ont été résolu !
Donc, lors d'un zoom avant, Les items grossissent (logique !) et lors d'un zoom arrière c'est l'inverse.
Ce que je souhaite, c'est que lorsque je zoom (avant ou arrière) les items grossissent ou rétressissent tout en gardant la MEME épaisseur de ligne !
Dans le constructeur de ma classe "Ligne", j'applique à un QPen : un setWidth(1) !
Est-ce que la classe "QTransform" peut faire l'affaire ? Si oui, comment faire pour l'utiliser ?
voici ma fonction zoom :
voici ma classe "Ligne" :
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
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 // SLOT private : zoom avec la molette void Dessin::zoom(int delta) { if(m_iZoom >= -5 && m_iZoom <= 5 && delta >= 0) { if(m_iZoom == 5) { return; } ++m_iZoom; m_vue->scale(1.5,1.5); m_vue->update(); m_scu->scale(1/1.5,1/1.5); scuPos(); m_scu->update(); } else if(m_iZoom <= 5 && m_iZoom >= -5 && delta <= -1) { if(m_iZoom == -5) { return; } --m_iZoom; m_vue->scale(1/1.5,1/1.5); m_vue->update(); m_scu->scale(1.5,1.5); scuPos(); m_scu->update(); } else { return; } }
Merci par avance !
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
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108 #include "ligne.h" #include <math.h> Ligne::Ligne(QGraphicsItem *parent) : QGraphicsPolygonItem(parent) { m_nom = "ligne"; setFlags(QGraphicsItem::ItemIsSelectable); setAcceptHoverEvents(true); setAcceptedMouseButtons(Qt::LeftButton); m_pen.setJoinStyle(Qt::RoundJoin); m_pen.setCapStyle(Qt::RoundCap); m_pen.setWidth(1); m_pen.setColor(Qt::white); setPen(m_pen); } Ligne::Ligne(const QPolygonF &polygon, QGraphicsItem *parent) : QGraphicsPolygonItem(polygon, parent) { m_nom = "ligne"; setFlags(QGraphicsItem::ItemIsSelectable); setAcceptHoverEvents(true); setAcceptedMouseButtons(Qt::LeftButton); m_pen.setJoinStyle(Qt::RoundJoin); m_pen.setCapStyle(Qt::RoundCap); m_pen.setWidth(1); m_pen.setColor(Qt::white); setPen(m_pen); } Ligne::~Ligne() { } // Fonction protected réimplémenté : Modifie la couleur de la ligne lors du passage de la souris void Ligne::hoverEnterEvent(QGraphicsSceneHoverEvent * event) { m_pen.setColor(Qt::red); m_pen.setWidth(1); m_pen.setJoinStyle(Qt::RoundJoin); m_pen.setCapStyle(Qt::RoundCap); setPen(m_pen); update(); QRectF rec = boundingRect();// récupère les dimensions ! //Calcul de la longueur de la ligne***************************************************************** double longueur = rec.width(); double largeur = rec.height(); longueur = round(longueur); largeur = round(largeur); double tot = (longueur*longueur) + (largeur*largeur); double result = sqrt(tot); result *= 10; result = round(result)/10; //Fin du calcul de la longueur********************************************************************** //Calcul de l'angle d'inclinaison de la ligne******************************************************* double total; if(longueur == 1) { longueur = 0; } total = longueur/result; double angle = acos(total); angle = angle*(180/M_PI);// Convertion radians en degrés (M_PI est une constante de math.h) //Fin du calcul de l'angle************************************************************************** //Affichage des résultats dans l'infobulle********************************************************** QString nombre; QString a; nombre.setNum(result); a.setNum(angle,'f',1); setToolTip("Longueur : " + nombre + " mm.\nAngle : " + a + "°."); //Fin de l'affichage******************************************************************************** QGraphicsPolygonItem::hoverEnterEvent(event); } // Fonction protected réimplémenté : Modifie la couleur de la ligne lorsque la souris n'est plus au-dessus void Ligne::hoverLeaveEvent(QGraphicsSceneHoverEvent * event) { m_pen.setColor(Qt::white); m_pen.setWidth(1); m_pen.setJoinStyle(Qt::RoundJoin); m_pen.setCapStyle(Qt::RoundCap); setPen(m_pen); update(); QGraphicsPolygonItem::hoverLeaveEvent(event); } // Fonction public : retourne le nom de l'item (nom = "ligne") QString Ligne::getNom() const { QString n = m_nom; return n; } void Ligne::mousePressEvent(QGraphicsSceneMouseEvent *event) { if(this->isSelected()) { // Code à venir... } QGraphicsPolygonItem::mousePressEvent(event); }
Partager