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 :

recevoir un signal de la souris

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 43
    Par défaut recevoir un signal de la souris
    Bonjour, je m'excuse d'avance pour mes incomprehensions. Pourquoi?! voila je commence la programmation et j'admets bruler beaucoup d'étapes mais je préfère etre motivé par un projet personnel que d'ecrire "hello world!", je n'ai donc pas fait tous les exercices des tutoriaux.

    Heureusement qu'il y a des libs car sinon je ne vois pas comment j'aurais pu faire pour la webcam en c++.

    mais deja j'ai rencontré des problemes pour utiliser plusieurs librairies en meme temps car une seule ne fait pas tout! Voila un petit tutorial a faire quand je maitriserai bien. lol

    voici mon projet : capter via une webcam les films super8 de la famille en modifiant un projecteur.

    pour la capture j'ai utilise la lib openCV. ca c'est fait!
    pour l'interface graphique utilisateur je me suis dit Qt ca a l'air bien... oui pour faire des options a cocher, des boutons, demarrer, stop etc...

    mais je m'eloigne...

    il faut maintenant que je sois prevenu quand le bouton du milieu de ma souris est cliqué (en fait mon installation clique sur le bouton quand l'image est bien dans la fenetre du projecteur)
    n'ayant pas trouvé d'objet tout fait (ou de class toute faite, j'ai encore du mal.) je dois en creer un : le voici...

    souris.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
    37
    38
    39
    40
     
    #ifndef SOURIS_h
    #define SOURIS_h
     
    #include <QThread>
    #include <QEvent>
     
    class Souris : public QThread
    {
      Q_OBJECT
     
      public:
      //constructeur
        Souris(unsigned long milliSec);
      //accesseur
        void setSleep(unsigned long milliSec);
      //destructeur
        virtual ~Souris();
     
      protected:
        void run();
     
      public slots:
        void changerSleepSouris(unsigned long milliSec);
        void resetCompteur
     
      signals:
        void changementEtatBoutonSourisM( bool etatBoutonMilieu, unsigned long m_compteurClicMilieu);
        void clickBoutonMilieu ( unsigned long m_compteurClicMilieu );
     
      private:
        // QMouseEvent objSouris;
        // QEvent * generalEvent;
        unsigned long m_milliSec; // pour eviter les rebonds
        unsigned long m_compteurClicMilieu; // utile pour mon prog. Final
        bool m_etatBoutonMilieu;  // permet de 
     
    };
     
    #endif
    souris.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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
     
     
    Souris::Souris() :  milliSec( 1 )
    {
      m_milliSec = milliSec;
     
    }
     
    Souris::~Souris()
    {
     
    }
     
    void Souris::run()
    {
      while(1)
      {
        QMouseEvent * sourisEvent; //version 1
     
        if (event->button() == Qt::NoButton){
     
        }
        else if (event->button() == Qt::MidButton){
     
        }
     
        else {
          // "autre!!!\n"
        }
     
        QEvent * generalEvent; //version 1
     
        if (generalEvent->type() == Qt::NoButton){
     
        }
        else if (generalEvent->type() == Qt::MidButton){
     
        }
     
        else {
          // "autre!!!\n"
        }
      }
      this::msleep ( m_milliSec )
    }
     
    void Souris::setSleep(unsigned long milliSec)
    {
      m_milliSec = milliSec;
    }
     
    void Souris::changerSleepSouris(unsigned long milliSec)
    {
      m_milliSec = milliSec;
    }
    j'ai pensé a deux versions dans le "run()" la seconde me semble plus proche du signal et semble pouvoir capter le bouton meme a l'exterieur de la fenetre Qt ce qui est aussi important.

    je pense que c'est assez brouillon pour un vrai codeur mais si une ame charitable pouvait m'aider?

  2. #2
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Par défaut
    Pourquoi ne pas gerer une evenement comme moussePressEvent plutot que ton thread ?
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 43
    Par défaut
    il me semble que moussePressEvent ne me permet pas d envoyer un signal a mon slot qui va prendre l'image.

    de plus moussePressEvent est associer a un widget donc ne detectera t il pas l'action que si la souris est dans zone de la fenetre?

    il me semble que mon thread me permet le test puis en fonction du resultat : cree le signal. mais je ne suis meme pas sure que ma class fonctionne je n'ai pas pu la tester. ( il manque qque infos dans le run de toute facon ).

    j'ai des problemes de compilation avec Qt et code::bloc ou faire mon make avec d'autre libraries... mais c un autre probleme.

  4. #4
    Membre éclairé Avatar de gassi64
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2008
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2008
    Messages : 255
    Par défaut
    Citation Envoyé par espritlune Voir le message
    il me semble que moussePressEvent ne me permet pas d envoyer un signal a mon slot qui va prendre l'image.
    Tu peux envoyer un signal par un simple "emit" où tu le souhaites.

    j'ai des problemes de compilation avec Qt et code::bloc ou faire mon make avec d'autre libraries... mais c un autre probleme.
    Pour cela, suffit de modifer le .pro pour donner les chemins vers tes libs par "LIBS += ", tu trouveras de la doc dessus

  5. #5
    Membre expérimenté Avatar de cayou66
    Inscrit en
    Décembre 2008
    Messages
    286
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Décembre 2008
    Messages : 286
    Par défaut
    de plus moussePressEvent est associer a un widget donc ne detectera t il pas l'action que si la souris est dans zone de la fenetre?
    Une fenêtre est un widget

    emit monSignal(unparametre); fonctionne !

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 43
    Par défaut
    Merci pour vos réponses rapides.
    Pour cela, suffit de modifier le .pro pour donner les chemins vers tes libs par "LIBS += ", tu trouveras de la doc dessus
    Et ca en moins!!! cool!


    Tu peux envoyer un signal par un simple "emit" où tu le souhaites.
    Bien sure! Je ne l'avais pas écris dans mon run() mais c'est vrai qu'il manque mon emit dans les conditions "if".


    La question que je me posait suite a l'intervention de superjaja :
    Pourquoi ne pas gérer une événement comme moussePressEvent plutôt que ton thread ?
    je ne suis pas sure de bien comprendre son fonctionnement :

    void QWidget::mousePressEvent ( QMouseEvent * event )

    Faut il que je redéfinisse cette fonction en y insérant mes conditions et mon emit?
    sera t elle "exécuté" dès qu'un évènement souris se passe? (sans être dans une boucle)
    un petit indice pour redéfinir cette fonction dans un widget : dois-je en créé un ou puis-je l'intégrer à ma fenêtre principale?

    Une fenêtre est un widget
    J'avais plus ou moins compris mais du coup si je clic à l'extérieur de la fenêtre, mon clic sera t il pris en compte et donc mon signal généré?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 43
    Par défaut Merci a tous
    Merci pour vos participations.

    J'obtiens jusqu'à 26 clics par seconde ce qui est amplement suffisant.

    Je rencontre un autre problème qui concerne le flux de la webcam qui n'est pas assez précis ni synchronisable à mon niveau... mais c'est pour une autre question.

    C'est donc Résolu pour capter les clics.

    Encore merci.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 24/02/2015, 08h13
  2. Réponses: 1
    Dernier message: 08/03/2009, 17h55
  3. Réponses: 4
    Dernier message: 28/12/2008, 21h46
  4. Signaler le survol de la souris sur un élément de menu
    Par hellspawn_ludo dans le forum Mise en page CSS
    Réponses: 9
    Dernier message: 05/05/2008, 15h56
  5. Comment simuler un signal souris
    Par shiin dans le forum Linux
    Réponses: 1
    Dernier message: 12/09/2006, 09h03

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