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:
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:
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:
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:
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:
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!
Bonjour,
J'ai essayé d'implémenter ce code. Il trace bien un carré rouge par contre, il ne trace pas les lignes sur les cotés.
Es ce que vous savez c'est quoi le problème s'il vous plait.
J'ai encore un autre problème pour glisser l'item sur la scène. (je n'arrive pas à le bouger)
Merci de votre aide!
Résolu!
Mon problème est la non utilisation du pen.