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 à la souris


Sujet :

Qt

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 29
    Points : 11
    Points
    11
    Par défaut Dessiner à la souris
    Bonjour,

    Je suis en train de développer un logiciel où il faut placer des rectangles dans un QWidget avec la souris. Je veux faire que pour tracer ce rectangle on fasse : "clique enfoncé de la souris, puis déplacement de la souris, et enfin relâchement du clique de la souris" ça nous donne 2 points (départ et arrivé) pour tracer le rectangle.

    Et je ne pas comment faire, car il faut aussi que si on sort du QWidget pendant le traçage ça annule le traçage (donc la detection des cliques et du déplacement doivent se faire dans la même fonction).

    Un "setDragMode(QGraphicsView::ScrollHandDrag);" pourrait-il marcher, et comment ?

    Je ne suis pas encore super à l'aise avec Qt, soyez pédagogues svp.
    Merci.

  2. #2
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 617
    Points
    15 617
    Par défaut
    Salut et bienvenue sur le forum

    D'après ce que je comprends, tu dessines tes rectangles à coup de QWidget ? Si c'est le cas, tu vas galérer un peu, c'est pas trop fait pour

    Regarde plutôt du côté de QGraphics, en particulier ce code d'exemple : http://qt-project.org/doc/qt-5.0/qtw...gramscene.html
    Tu devrais y trouver tous les éléments de réponses permettant de faire ce que tu veux

    Bon courage

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 29
    Points : 11
    Points
    11
    Par défaut
    Merci,
    Mais malheureusement ce programme est dans le cadre d'un projet étudiant et une des contraintes est d'utiliser un QWidget pour afficher et manipuler les formes.
    Mais peut-être que je peut mettre un QGraphics dans mon widget ?
    Pour l'instant j'arrive à afficher mes formes (dans le QWidget), pour tester j'ai fais que lors d'un simple clique dans le widget un carré bleu se dessine.
    Je vous met un résumé de mon code :
    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
     
    class QWidgetImage: public QWidget
    {
    public:
            void paintEvent(QPaintEvent *);
            void rectangle(Point , Point );
            void mousePressEvent(QMouseEvent *);
            void mouseReleaseEvent(QMouseEvent *)
    private:
            QVector<QPainterPath> paths;
    }
     
    void QWidgetImage::mousePressEvent(QMouseEvent* event)
    {
            rectangle(Point(10,10,0), Point(30,30,0));
            repaint();
    }
    void QWidgetImage::rectangle(Point p1, Point p2)
    {
            QPainterPath path;
            path.addRect(p1.getX(), p1.getY(), p2.getX() - p1.getX(), p2.getY() - p1.getY());
            paths.push_back(path);
    }
    void QWidgetImage::QWidgetImage::paintEvent(QPaintEvent * event)
    {
     
        QPainter painter(this);
        QBrush brush(Qt::blue, Qt::DiagCrossPattern);
        painter.setRenderHint(QPainter::Antialiasing);
        painter.fillRect(event->rect(), QBrush((Qt::white)));
        for (int i = 0; i < paths.size(); i++)
        {
            painter.fillPath(paths.at(i),brush);
        }
    }

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 29
    Points : 11
    Points
    11
    Par défaut
    Au final j'aimerais faire un fonction de ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void QWidgetImage::mousePressEvent(QMouseEvent* event)
    {
        Qt::MouseButtons mouseButtons = event->buttons();
        if( mouseButtons == Qt::LeftButton )
        {
                    Point posSouris = Point(event->pos().x(), event->pos().y(), 0);
                    while (et là je cherche quelque chose du genre : mouseButtons.LeftButton.isPressed());
                    rectangle(posSouris, Point(event->pos().x(), event->pos().y(), 0));
        }
    }
    Comment je fais ?

  5. #5
    Rédacteur
    Avatar de Amnell
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    1 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 840
    Points : 5 545
    Points
    5 545
    Par défaut
    Bonjour,

    Non testé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class QWidgetImage: public ...
    {
    public:
        ...
     
    protected:
        virtual void mousePressEvent(QMouseEvent*);
        virtual void mouseReleaseEvent(QMouseEvent*);
     
    private:
        QPoint _pressPos;
        QVector<QPainterPath> paths;
    };
    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
    void QWidgetImage::mousePressEvent(QMouseEvent *event)
    {
        if (event->buttons()== Qt::LeftButton)
            _pressPos = event->pos();
    }
     
    void QWidgetImage::mouseReleaseEvent(QMouseEvent *event)
    {
        if (event->buttons()== Qt::LeftButton)
        {
            rectangle(_prevPos, event->pos());
            update();
        }
    }
     
    void QWidgetImage::rectangle(QPoint p1, QPoint p2)
    {
        QPainterPath path;
        path.addRect(p1.x(), p1.y(), p2.x() - p1.x(), p2.y() - p1.y());
        paths.push_back(path);
    }
    Éventuellement, avec le mouseMoveEvent(), vous pourrez montrer à l'utilisateur le résultat qu'il aura quand il relâchera la souris.

    Bonne continuation,
    Amnell.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 29
    Points : 11
    Points
    11
    Par défaut
    Merci, ça marche.

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

Discussions similaires

  1. Dessiner à la souris
    Par jeje42 dans le forum PyQt
    Réponses: 6
    Dernier message: 21/01/2012, 19h31
  2. Dessiner à la souris
    Par co2gaz dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 31/03/2011, 00h28
  3. Gestions évènements avec souris - Dessiner avec souris
    Par CosaNostra dans le forum Débuter
    Réponses: 10
    Dernier message: 23/01/2010, 11h05
  4. Dessiner à la souris sur le plan XZ
    Par DjGonk dans le forum OpenGL
    Réponses: 4
    Dernier message: 07/02/2008, 17h25
  5. Réponses: 4
    Dernier message: 10/09/2006, 20h06

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