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 :

Événements souris

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Etudiant - eXia Cesi (toulouse)
    Inscrit en
    Janvier 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant - eXia Cesi (toulouse)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 8
    Par défaut Événements souris
    bonjour a tous, je viens vers vous avec ce message pour vous demander des éclaircissements.

    je travail sur un projet qui consiste dans l'absolu a établir un tableau de bord pour l'utilisateur
    celui ci doit:
    - placer un point sur une carte géographique(pixmap)

    le problème arrive ici, je souhaite paramétrer ce point en faisant un double clique dessus.

    ma question est comment organiser un événement "double clique sur un item dans une scène"?

    merci d'avance pour vos réponse

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Par défaut
    Qt et non QT !

    Il suffit que cet item hérite de QWidget (c'est sûrement le cas), et alors il faut redéfinir la méthode mouseDoubleClickEvent().

  3. #3
    Membre habitué
    Homme Profil pro
    Etudiant - eXia Cesi (toulouse)
    Inscrit en
    Janvier 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant - eXia Cesi (toulouse)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 8
    Par défaut
    alors voila j'ai cherché en prenant en compte ta proposition, je pense m'approcher de la solution (mais sans certitude)
    c'est a dire que je ne sait pas trop comment organiser mon code

    voici dans le .h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class MaFenetre : public QMainWindow
    {
        public:
            MaFenetre();
        private:
            QGraphicsScene* scene;
            QGraphicsView* vue;
            QGraphicsTextItem* txt_item;
        protected:
            void mousePressEvent ( QGraphicsSceneMouseEvent *event );
    };
    et dans le .cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    MaFenetre::MaFenetre(): QMainWindow()
    {
        //...
        QGraphicsTextItem *txt_item = new QGraphicsTextItem("blabla");
        scene->addItem(pointcapt);
    }
     
    void QGraphicsScene::mousePressEvent ( QGraphicsSceneMouseEvent *event )
    {
        if (event->type() == QEvent::GraphicsSceneMouseDoubleClick) {
            //...
        }
    }

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Par défaut
    Si c'est l'événement s'applique sur la QGraphicScene, alors il te faut faire une classe héritant de QGraphicScene, où tu redéfinis l'event.

    MaScene.h
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class MaScene : public QGraphicsScene
    {
        public:
            MaScene();
        protected:
            void mouseDoubleClickEvent ( QGraphicsSceneMouseEvent *mouseEvent );
    };

    MaScene.cpp
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    MaScene::MaScene() : QGraphicsScene()
    {
    }
     
    MaScene::mouseDoubleClickEvent ( QGraphicsSceneMouseEvent *mouseEvent )
    {
        // code à l'événement double clic
    }

    D'autre part, mousePressEvent (bouton pressé) n'a rien à voir avec un double clic, à mon avis ce que tu as fait ne pouvais pas marcher (à moins que tu l'aies trouvé de source sûre mais comme ça, ça m'étonne). Dans un mousePressEvent, ce que tu testes grâce à l'objet event, c'est quel bouton a été pressé par exemple (gauche, droit...).

    Là où on teste event->type(), c'est dans les fonctions de capture plus générique. Par exemple, la fonction event() qui a un paramètre QEvent, et capture tous les événements clavier ou souris ou autre, ce qui oblige à tester le type pour savoir ce que c'est.

  5. #5
    Membre habitué
    Homme Profil pro
    Etudiant - eXia Cesi (toulouse)
    Inscrit en
    Janvier 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant - eXia Cesi (toulouse)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 8
    Par défaut
    En effet, le mousePressEvent était hors sujet... s'était une tentative désespéré avant de me coucher.

    Ok alors j'ai pas mal avancé, j'ai donc créé une classe "MaScene" et j'y ai ajouté un mouseDoubleClickEvent. tout s'est bien passé, j'ai mis un QDebug pour vérifier le double clique, sa se passe très bien.
    aujourd'hui l’événement souris est réglé.

    j'ai en revanche un autre problème concernant la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scene->addItem(pointcapt);
    pour remettre les choses en place; l'utilisateur via un clique sur un bouton qui ajoute un TextItem a ma scene or le compilo compile bien (pas d'erreurs)
    en revanche le programme plante lorsque je clique sur mon bouton qui ajoute l'item dans la scene... en utilisant le débuggeur, c'est cette ligne qui me bloque...

    voici le code:
    MaFenetre.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
    class MaScene;
    class MaFenetre : public QMainWindow
    {
        Q_OBJECT
     
        public:
            MaFenetre();
            MaScene* scene;
     
        private:
            QGraphicsView* vue;
            QStatusBar* barreEtat;
     
        public slots:
            void addpoint();
    };
    MaFenetre.cpp
    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
    MaFenetre::MaFenetre(): QMainWindow()
    {
        //définition de la scene
        MaScene* scene = new MaScene();
        scene->addPixmap(QPixmap(":/images/carte.png"));
     
        //définition de la vue
        vue = new QGraphicsView(scene, zoneCentrale);
        vue->show();
     
       //appel de fonction
        connect(actionAddcapt, SIGNAL(triggered()), this, SLOT(addpoint()));
    }
    void MaFenetre::addpoint(MaScene *scene)
    {
        QGraphicsTextItem *pointcapt = new QGraphicsTextItem("capteur X");
        pointcapt->setFlag(QGraphicsTextItem::ItemIsMovable);
        pointcapt->setFlag(QGraphicsTextItem::ItemIsSelectable);
        pointcapt->setPos(650,315);
        scene->addItem(pointcapt);//c'est a cette ligne que le programme plante...
    }
    MaScene.h:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class MaScene : public QGraphicsScene
    {
        Q_OBJECT
     
        public:
            MaScene();
     
        protected:
            void mouseDoubleClickEvent ( QGraphicsSceneMouseEvent *event );
    };
    et enfin MaScene.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    MaScene::MaScene() : QGraphicsScene()
    {
    }
     
    void MaScene::mouseDoubleClickEvent ( QGraphicsSceneMouseEvent *event )
    {
        qDebug()<<"dbclick";
        if (event->type() == QEvent::GraphicsSceneMouseDoubleClick) {
            void pointregister();
        }
    }
    en tout cas merci beaucoup pour ton aide

  6. #6
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Par défaut
    Petite remarque, qui ne concerne pas ton problème :

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    if (event->type() == QEvent::GraphicsSceneMouseDoubleClick) {}
    ne sert à rien, cette fonction ne s'exécutant que lors d'un GraphicsSceneMouseDoubleClick justement, comme j'ai voulu te l'expliquer.

Discussions similaires

  1. [JTextPane] Ajouter un évènement souris sur un mot
    Par soad dans le forum AWT/Swing
    Réponses: 12
    Dernier message: 20/03/2007, 15h12
  2. Réponses: 2
    Dernier message: 17/11/2006, 13h48
  3. [Débutant]Gestion des évènements souris
    Par bubu251 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 06/10/2006, 11h49
  4. [FLASH MX2004] Les actions des événements souris ne fonctionnent plus
    Par Demco dans le forum ActionScript 1 & ActionScript 2
    Réponses: 7
    Dernier message: 21/04/2006, 21h37
  5. [wxpython] problème avec les événements souris
    Par kalimero dans le forum wxPython
    Réponses: 2
    Dernier message: 13/11/2005, 15h42

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