IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Discussion :

Création d'un rectangle sur une scène à partir de la classe QGraphicsRectItem

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2012
    Messages : 17
    Par défaut Création d'un rectangle sur une scène à partir de la classe QGraphicsRectItem
    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,

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2012
    Messages : 17
    Par défaut réponse
    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:

    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, "_______________");
    Si vous avez d'autres réponses, je serais reconnaissant.

    Cordialement,

  3. #3
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2010
    Messages : 248
    Par défaut
    Bonjour,

    Les lignes peuvent être faite en utilisant les fonctions QPainterPath::moveTo() ainsi que QPainterPath::lineTo()
    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 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.

    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..).

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2012
    Messages : 17
    Par défaut Réponse
    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, "____________________________");

  5. #5
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2010
    Messages : 248
    Par défaut
    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)
    Images attachées Images attachées  

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2012
    Messages : 17
    Par défaut Réponse
    Mer(ci beaucoup!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 06/07/2006, 12h11
  2. [Image]Dessiner des rectangles sur une image
    Par navona dans le forum Bibliothèques et frameworks
    Réponses: 9
    Dernier message: 09/03/2006, 22h51
  3. Création dynamique de méthode sur une classe ?
    Par elitost dans le forum Général Java
    Réponses: 9
    Dernier message: 18/10/2005, 14h47
  4. Dessiner un rectangle sur une forme
    Par Neo41 dans le forum MFC
    Réponses: 6
    Dernier message: 13/08/2005, 01h08
  5. [VB.NET] [WinForms] Afficher un rectangle sur une image
    Par Noodles dans le forum Windows Forms
    Réponses: 3
    Dernier message: 20/12/2004, 10h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo