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 :

Détecter si le curseur est au-dessus du bouton avant de cliquer

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 38
    Par défaut Détecter si le curseur est au-dessus du bouton avant de cliquer
    Salut.

    J'ai fait une classe boutton qui herite de QPushButton afin d'y assigner d'autres slots et signaux:

    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
    #ifndef BOUTON_H
    #define BOUTON_H
     
    #include <QPushButton>
    #include <QMouseEvent>
     
    class bouton : public QPushButton
    {
        Q_OBJECT
     
     
        void mouseReleaseEvent(QMouseEvent* e) {
            if (e->button()== Qt::LeftButton) emit clicked();
            if (e->button()== Qt::RightButton) emit rclicked();
        };
     
        void mousePressEvent(QMouseEvent* e) {
            if (e->button()== Qt::LeftButton) emit sclicked();
        };
     
     
    public:
       bouton(QWidget *parent=0);
     
    signals:
     
       void rclicked();
       void sclicked();
     
     
    };
     
    #endif // BOUTON_H
    Le probleme que j'ai pas pu le resoudre, c'est comment ne pas valider le click lorsque le curseur n'est pas au dessus du boutton: c'est à dire: si j'appuie sur mon boutton, puis je deplace le curseur, tout en maintenant le boutton du souris appuyé, jusqu'à ce que le curseur ne soit pas sur le boutton. Lorsque je relache, le click, par defaut, est emis. Par contre, je ne veux pas que ça se produit que lorsque le curseur soit sur le boutton.

    Merci bien pour votre aide!

  2. #2
    Invité
    Invité(e)
    Par défaut
    D'abord il faut que tu récupères la position du curseur via la fonction QMouseEvent::pos()ou via la fonction QWidget::cursor()::pos().

    Ensuite pour vérifier si le point est contenus dans le QPushButton, vérifies que la position du curseur contenus dans un QPoint soit à la l'intérieur des limites interne du widget.

    Pour se faire, utilise la fonction QWidget::rect() pour connaitre les limites interne du widget et de la fonction QRect::contains() pour savoir si le point est contenus dans le rectangle.

    Place le tout dans tes gestionnaires événementiels.

  3. #3
    Membre expérimenté

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2006
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 281
    Par défaut
    Bonjour,

    Il me semble que les évènements enterEvent et/ou leaveEvent pourrait faire l'affaire.

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/07/2008, 16h53
  2. Comment détecter si un tableau est vide ?
    Par ErPi dans le forum Langage
    Réponses: 6
    Dernier message: 27/06/2005, 18h50
  3. Réponses: 15
    Dernier message: 27/04/2005, 10h41
  4. [Delphi 6] Comment détecter si un poste est connecté ?
    Par Lung dans le forum Web & réseau
    Réponses: 81
    Dernier message: 22/04/2005, 15h13
  5. [Image] détecter que le chargement est terminé
    Par Pascmar dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 19/07/2004, 19h12

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