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 :

MouseEvent mouseReleaseEvent ?


Sujet :

Qt

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut MouseEvent mouseReleaseEvent ?
    salut
    je cherche de la doc sur mouseReleaseEvent et sur mouseMoveEvent
    est ce il y a parmi vs qui a deja utiliser ces 2 méthodes virtuelle

    merci

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Points : 969
    Points
    969
    Par défaut
    Bienvenue sur le forum,

    Le plus simple, c'est de créer une classe qui étend QWidget, et dedans tu redéfinis la/les fonctions qui t'intéresse. C'est pas plus compliqué que ça.
    Si tu veux plus d'aide, dis nous plus précisément ce que tu veux faire.

    G.

  3. #3
    Membre habitué Avatar de duplo
    Inscrit en
    Octobre 2004
    Messages
    294
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Octobre 2004
    Messages : 294
    Points : 172
    Points
    172
    Par défaut
    Citation Envoyé par piratos14 Voir le message
    salut
    je cherche de la doc sur ....
    salut, toute la doc Qt sans exception est ici http://qt.developpez.com/doc/4.0/classes/

    Bonne continuation.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Evenement Zone edition SpinBox
    je cherche la méthode de la souris

    Quand je clique sur le bouton gauche de la sourirs un signal sera emis pour ouvrir une boite de dialog

    j'ai essayé de faire :

    QObject::connect(ui.doubleSpinBox_7, SIGNAL(clickedSpin()), this, SLOT(clearSpin()));



    void FenetrePrincipale::mousePressEvent( QMouseEvent * event ){
    if (event->button() == Qt::LeftButton){

    emit clickedSpin();
    }

    }



    void FenetrePrincipale::clearSpin(){

    //ui.label_10->clear();
    QMessageBox::information(this, tr("A propos de moi"), tr(" boite de dialog ");

    si il y a une aide n'hésitez pas svp

  5. #5
    Membre habitué Avatar de duplo
    Inscrit en
    Octobre 2004
    Messages
    294
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Octobre 2004
    Messages : 294
    Points : 172
    Points
    172
    Par défaut
    alors procédons par ordre, déjà apparemment ( vu le nom de tes widget ) tu utilise le designer de qt, essais de changer leur nom via celui ci se sera beaucoup plus simple pour toi !

    ensuite, tu cherche un evenement sur un QDoubleSpinBox alors pourquoi cherche tu un événement de clic sourie ? le signal valueChanged(double) ne te conviendrais t'il pas ? celui ci est émit des que la valeur de la spinbox est changée.

    si tel est le cas voila le code pour mettre sa en place :

    class.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
    #include <QWidget>
    #include <QDoubleSpinBox>
    #include <QMessageBox>
     
     
     
    class classe : public QWidget {
    Q_OBJECT
    public:
        classe();
           ~classe();
     
    private:
        QDoubleSpinBox* m_sp;
     
    public slots:
        void monSlot(double);
    };
    class.cc

    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
    #include "class.h"
     
     
     
    classe::classe() {
        m_sp = new QDoubleSpinBox(this);
        connect(m_sp, SIGNAL(valueChanged(double)), this, SLOT(monSlot(double)));
    }
     
     
    void classe::monSlot(double){
        QMessageBox::information(0, "titre", "blablablablaba....balbla");
    }
     
     
     
    classe::~classe() {
        if(m_sp != NULL)
            delete m_sp;
    }
    main.cc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <QApplication>
     
     
    #include "class.h"
     
    int main(int argc, char** argv) {
        QApplication app (argc, argv);
     
        classe tmp;
        tmp.show();
     
     
        return app.exec();
    }


    aller je ne vais pas faire de feneantise, pour aller dans le sens que tu voulais ( avec le MouseEvent ) voici le code ( qui soit dit en passant revient au même car le signal est emit quand tu clic sur un des boutons ( = a quand tu modifie la valeur du spin ))

    class.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
    #include <QDoubleSpinBox>
    #include <QMessageBox>
    #include <QMouseEvent>
     
     
     
    class classe : public QDoubleSpinBox {
    Q_OBJECT
    public:
        classe();
        void mousePressEvent(QMouseEvent*); 
     
     
    public slots:
        void monSlot();
     
    signals:
        void monSignal();
     
    };
    class.cc
    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
    #include "class.h"
     
     
     
    classe::classe() {
        connect(this, SIGNAL(monSignal()), this, SLOT(monSlot()));
    }
     
    void classe::mousePressEvent(QMouseEvent* _event){
        if (_event->button() == Qt::LeftButton){
            emit monSignal();
    }
    }
     
     
    void classe::monSlot(){
        QMessageBox::information(0, "titre", "blablablablaba....balbla");
    }
    main.cc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <QApplication>
     
     
    #include "class.h"
     
    int main(int argc, char** argv) {
        QApplication app (argc, argv);
     
        classe tmp;
        tmp.show();
     
     
        return app.exec();
    }
    tu peux aussi directement appeler le slot tel une fonction a la place d'emetre un signal et de l'y connecter ... c'est beaucoup plus simple/propre

    en passant je m'excuse pour les nom vraiment bidon donné au classes et attributs mais bon j'ai fais sa vite fait avec un restant de fleme d'hier ^^

  6. #6
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juillet 2008
    Messages : 55
    Points : 45
    Points
    45
    Par défaut
    ce qu'il y c'est qu'il veut nettoyer le spin au moment où il chope le focus, et non lorsque la valeur change. Re piratos14 ^^.

    Pour te dire j'ai eu la même chose à faire, voilà pourquoi je t'avais déjà mis sur la piste du focusInEvent.
    Le problème avec mousePressEvent comme le dit duplo, c'est que cela n'arrivera qu'en cliquant sur le spin (c'est à dire le boutons, ou le contour si t'es précis) et non sur la zone d'édition.

    Si tu veux nettoyer ton spin, ce serait préférable en recevant le focus (càd même en cliquant sur les rebords ou la zone d'édition) tu n'a même pas besoin de connect:

    void Classe::focusInEvent(QFocusEvent *event)
    {
    clear();
    }

    Evidemment ça suffit pas, parce que là le spin sera toujours éffacé . Une fois de plus, a toi de voir à sous quelles conditions effacer le spin.

    Dernier point, le clear() doit être fait a partir de celui qui reçoit le focus. Dans le deuxième code de duplo tu verra que sa classe est une dérivée d'un Spin.
    Lorsque je vois dans ton code:
    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    void FenetrePrincipale::mousePressEvent( QMouseEvent * event ){
    j'en déduis que ton évènemment est appelé pour la fenetre, et non pour le spin, donc tu est obligé de faire un clear() ciblé, comme tu as fait avec
    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    ui.label_10->clear();
    Ce qui limite grandement ton champ d'action.
    En dérivant la classe QDoubleSpin box tu pourrais créer une classe contenant des méthodes très variées.

    Enfin je dit tout ça, ça se trouve chuis a coté de la plaque, mais sauf erreur de ma part, ton code ne semble pas laisser de doute sur tes intentions.

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    salut h3llmo
    merci pour la réponse je vois bien ce que mais est ce que le cas avec Qt designer ?? tt l'interface est développer avec ce dernier .

    pour bien expliquer, je cherche pas a effacer le contenu de ce spinbox
    mon but est:
    quand je clique sur le widget(spinbox) avec la souris que ce soit dans la zone ou sur lui même un signal qui va ouvrir une fenêtre dialog (comme une calculatrice)

    j'espère que c compréhensible

  8. #8
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Points : 969
    Points
    969
    Par défaut
    Belle réponse de duplo, c'est complet !

    Selon moi, le mieux à faire est ce qu'à dit Duplo dans son deuxième exemple, sauf que tu n'as pas besoin ni de signal, ni de slot, ni de connect.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void classe::mousePressEvent(QMouseEvent* _event){
        if (_event->button() == Qt::LeftButton){
            if(!monWidget->isVisible())
                monWidget->show();
     
        monWidget->raise();
     
    }
    }
    Cependant, faire cela t'empêchera d'utiliser les boutons classiques du SponBox. Si tu veux restreindre l'action à la zone éditable, il faut que tu utilises QDoubleSpinBox::lineEdit() pour récupérer un pointeur sur la zone éditable, puis jouer avec les positions du click et de la zone éditable, pour voir si ton click gauche a lieu sur les boutons, ou sur la zone éditable.

    Je pense aussi qu'il faudra, dans le mousePressEvent, appeler la fonction de la classe mère afin de garder le fonctionnement des boutons.

    Bonne chance,

    G.

Discussions similaires

  1. Probleme avec mouseevent et screenX()
    Par Battosaiii dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 14/12/2005, 10h53
  2. [MouseEvent] arret de souris = repaint() ?
    Par n00bi dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 08/06/2005, 12h38
  3. [Débutant]MouseEvent et InputEvent
    Par lejimi dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 09/11/2004, 20h41
  4. [Java2D]MouseEvent sur un paint Graphics g
    Par tahiti bob dans le forum 2D
    Réponses: 9
    Dernier message: 09/10/2004, 23h15
  5. Réponses: 7
    Dernier message: 03/08/2004, 17h33

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