Bonjour,
Comment on peut à partir d'une classe qui hérite de QGraphicsRectItem créer un rectangle avec des lignes droites (à droite et à gauche du rectangle pour désigner les entrées et les sorties)?
Merci beaucoup!
Cordialement,
Bonjour,
Comment on peut à partir d'une classe qui hérite de QGraphicsRectItem créer un rectangle avec des lignes droites (à droite et à gauche du rectangle pour désigner les entrées et les sorties)?
Merci beaucoup!
Cordialement,
Bonjour,
La réponse est simple:
Juste, il faut créer un rectangle à part et créer les lignes à part. Par contre, il faut bien choisir les bonnes coordonnées.
Pour moi, je fais comme ça:
Si vous avez d'autres réponses, je serais reconnaissant.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 path.addRect( 0, 0, 100, 100); QFont myFont; path.addText(0,0,myFont,"MONOBLOC"); // path.addEllipse( QPoint(5,10), 10, 10); QPointF baseline(-20, 2); path.addText(baseline, myFont, "_______________"); QPointF baseline1(-20, 10); path.addText(baseline1, myFont, "_______________");
Cordialement,
Bonjour,
Les lignes peuvent être faite en utilisant les fonctions QPainterPath::moveTo() ainsi que QPainterPath::lineTo()Il est aussi possible de créer un item personnalisé, en héritant de la classe QGraphicsPolygonItem ou QGraphicsPathItem, je ne sais pas ce qui est le mieux.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 path.addRect( 0, 0, 100, 100); path.moveTo(0, 2); path.lineTo(-20, 2); path.moveTo(0, 10); path.lineTo(-20, 10);
Il existe aussi la classe QGraphicsItemGroup qui permet de grouper plusieurs item afin qu'il soit vu comme un seul item (facilite la sélection, le déplacement, le redimensionnement, etc..).
Bonjour,
J'ai essayé d'utiliser votre solution mais j'ai trouvé qu'il affiche pas les lignes (à droite et à gauche pour désigner des entrées sorties).
Moi, je voulais de base ajouter un rectangle sur le path avec des lignes à droites et à gauches (2, 3 lignes) pour désigner des lignes d'entrées /sorties.
Pourriez-vous m'aider?
Merci beaucoup!
PS. Moi j'utilise cette solution, mais ce n'est pas TOP !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 path.addRect( 0, 0, 100, 100); QFont myFont; path.addText(0,0,myFont,"MONOBLOC"); // path.addEllipse( QPoint(5,10), 10, 10); QPointF baseline(-20, 2); path.addText(baseline, myFont, "_____________________________"); QPointF baseline1(-20, 20); path.addText(baseline1, myFont, "____________________________");
Hello,
L'idéal est d'hériter de QGraphicsItem et de créer sont propre élément.
Voici un exemple qui devrait aider. Mais il manque des choses, comme la fonction boundingRect() qui n'est pas bien implémenter (j'ai repris un bout de code en vitesse et n'ai rien modifier), la taille qui est fixe.
J'ai fait ça en vitesse et je n'ai malheureusement pas le temps d'approfondir pour l'instant :
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 #ifndef CUSTOMITEM_H #define CUSTOMITEM_H #include <QGraphicsItem> class CustomItem : public QGraphicsItem { public: CustomItem(QGraphicsItem *parent = 0); virtual QRectF boundingRect() const; protected: void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); }; #endif // CUSTOMITEM_H
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 #include "customitem.h" #include <QPainter> #include <QStyleOptionGraphicsItem> #include <QDebug> const int MARGIN= 20; const int LINE_LEN = MARGIN - 5; CustomItem::CustomItem(QGraphicsItem *parent) : QGraphicsItem(parent) { } QRectF CustomItem::boundingRect() const { qreal penWidth = 1; return QRectF(-10 - penWidth / 2, -10 - penWidth / 2, 20 + penWidth, 20 + penWidth); } void CustomItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { QRect drawRect = QRect(MARGIN, MARGIN, 100 - MARGIN, 100 - MARGIN); painter->drawRect(drawRect); qDebug() << drawRect; qDebug() << drawRect.left() << MARGIN + 10 << drawRect.left() - LINE_LEN << MARGIN + 10; painter->drawLine(drawRect.left(), MARGIN + 10, drawRect.left() - LINE_LEN, MARGIN + 10); painter->drawLine(drawRect.left(), MARGIN + 20, drawRect.left() - LINE_LEN, MARGIN + 20); painter->drawLine(drawRect.right(), MARGIN + 10, drawRect.right() + LINE_LEN + painter->pen().width(), MARGIN + 10); painter->drawLine(drawRect.right(), MARGIN + 20, drawRect.right() + LINE_LEN + painter->pen().width(), MARGIN + 20); }
Le résultat visuel est en pièce jointe. (Élément en haut à gauche)
Mer(ci beaucoup!
Partager