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

Qt Discussion :

Dessiner un rectangle de sélection (QStyleOptionFocusRect)


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 237
    Par défaut Dessiner un rectangle de sélection (QStyleOptionFocusRect)
    Bonjour,

    Je voudrais dessiner un rectangle de sélection pour selectionner des objets sur mon widget avec la souris. Voici un bout de code de ce que j'ai fait, mais ça marche pas, j'ai rien qui est tracé quand je clique et je bouge la souris.

    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
    void appli::mouseMoveEvent(QMouseEvent *event)
    {
               QStylePainter painter(this);
               painter.setPen(QColor(qRgb(255,0,0)));
               QStyleOptionFocusRect option;
               option.initFrom(this);
               option.backgroundColor = QColor(qRgb(255,0,0));
               QRect rect = QRect(m_ptTracked, m_ptLast);
     
               painter.drawRect(rect);
     
               rect.setRect(m_ptTracked.x(), m_ptTracked.y(), event->x(), event->y());
               painter.drawPrimitive(QStyle::PE_FrameFocusRect, option);
     
               painter.drawRect(rect);
               painter.drawPrimitive(QStyle::PE_FrameFocusRect, option);
     
     
               update();
     
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void appli::mousePressEvent(QMouseEvent *event)
    {
        if(event->button() == Qt::LeftButton)
        {
                /*Dessine le Rect de selection*/
                QRect rect(event->x(), event->y(), event->x(), event->y());//Point de départ du rectangle de sélection!
                m_ptTracked = event->pos();
                setCursor(Qt::CrossCursor);
     
            }
    }
    Si quelqu'un peut me dire où j'ai raté svp je suis preneur!
    merci d'avance.

  2. #2
    Membre émérite

    Profil pro
    Responsable logiciel
    Inscrit en
    Octobre 2010
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable logiciel

    Informations forums :
    Inscription : Octobre 2010
    Messages : 224
    Par défaut
    Bonjour,

    Normalement, la vue (QGraphicsView) gère ce type de sélection toute seule, il suffit de l'activer en appelant setDragMode(QGraphicsView::RubberBandDrag) sur ton objet vue (ton "appli" est de type QGraphicsView au fait ?). Sinon pour analyser ce qui se passe dans ton code, une fois que tu as vérifié que tu reçois bien les évènements mouseMoveEvent, tu peux essayer un dessin plus simple (indépendant de m_ptTracked) pour voir ce qui se passe.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 237
    Par défaut
    Oui merci, mais mon objet n'est pas un QGraphicView, et du coup je dois gérer moi meme le rectangle de sélection sous forme de focus.

    Je vais continuer à essayer, avec ce que j'ai fait ça devait qu'à meme me fournir un rectangle quand je bouge ma souris?

    Merci d'avance.

  4. #4
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Février 2010
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2010
    Messages : 243
    Par défaut
    Le code de dessin doit aller dans le paintevent,
    tu dois uniquement faire la mise à jour de tes variables internes dans le moveevent.

    Bref je te conseille de relire un exemple de custom widget
    Voir le paragraphe "Custom Widgets and Painting" de la doc QWidget et l'exemple "Analog clock" correspondant.

Discussions similaires

  1. Comment dessiner un rectangle de sélection ?
    Par nds75000 dans le forum VB.NET
    Réponses: 0
    Dernier message: 11/07/2010, 16h52
  2. dessiner un rectangle de sélection
    Par ninours23 dans le forum GTK+ avec C & C++
    Réponses: 4
    Dernier message: 13/02/2008, 16h51
  3. [Info]Rectangles de sélection : logiciel de dessin ?
    Par rozwel dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 27/03/2004, 17h49
  4. Dessiner un rectangle avec bords et texte ...
    Par Djedjeridoo dans le forum Composants VCL
    Réponses: 3
    Dernier message: 16/06/2003, 17h17

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