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 :

[Qt 4.8] Récupérer les événements MouseMove d'un QGroupBox

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 6
    Par défaut [Qt 4.8] Récupérer les événements MouseMove d'un QGroupBox
    Bonjour à tous, j'espère que vous pourrez m'aider,

    Je vous expose rapidement mon problème. J'essaie de récupérer la position de ma souris dans une fenêtre qui hérite de QMainWindow.
    J'ai donc surcharger la méthode de QWidget::MouseMoveEvent( MouseEvent *e ) dans laquelle je met juste un qDebug() pour afficher la position courante.

    Mon problème c'est que dans ma MainWindow, j'ai un QGroupBox dans un layout vertical.
    Quand je suis en dehors de ce QGroupBox, l’évènement MainWindow::MouseMoveEvent( MouseEvent *e ) est appelé, mais quand je suis dans le QGroupBox avec ma souris, impossible de le faire se lancer.

    A un moment, j'avais réussi à le récupérer en fesant un this->mouseGrab() dans l'evenement QWidget::MousePressedEvent( MouseEvent *e ) mais uniquement pour le clic droit, pas pour le click gauche bizarrement, et je pense que ce n'était pas la bonne solution.

    Pour résumé, l’évènement se lance bien quand je clic et me déplace n'importe où dans ma fenetre sauf dans mon QGroupBox où je souhaiterais justement, qu'il se lancer.

    Aussi autre problème, j'ai essayé d'activer this->setMouseTracking( true ) sur ma QMainWindow, mais ça n'a aucun effet. Qu'il soit actif ou non, mon evenement est toujours lancer uniquement quand j'enfonce un bouton de la souris, pas le reste du temps.

    Petite précision, je fais des repaint() personnalisés sur cette interface, mais je ne pense pas que ça vienne de la.

    Merci d'avance pour l’intérêt que vous porterez à mon problème, je suis client pour toutes suggestions,

    David

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 6
    Par défaut
    Voila comment je m'y suis pris, j'ai promu un QGroupBox en MyGroupBox dans QtCreator et j'appel une méthode publique pour transmettre mon évènement.

    Aussi, si vous voulez activer le mouseTracking sur un QMainWindow, il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ui->centralWidget->setMouseTracking( true );
    Un exemple rapide de ce que ça peut donner :

    mainwindow.ui :
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <ui version="4.0">
     <class>MainWindow</class>
     <widget class="QMainWindow" name="MainWindow">
      <property name="geometry">
       <rect>
        <x>0</x>
        <y>0</y>
        <width>536</width>
        <height>277</height>
       </rect>
      </property>
      <property name="windowTitle">
       <string>MainWindow</string>
      </property>
      <widget class="QWidget" name="centralWidget">
       <widget class="MyGroupBox" name="groupBox">
        <property name="geometry">
         <rect>
          <x>110</x>
          <y>50</y>
          <width>311</width>
          <height>171</height>
         </rect>
        </property>
        <property name="title">
         <string>GroupBox</string>
        </property>
       </widget>
      </widget>
     </widget>
     <layoutdefault spacing="6" margin="11"/>
     <customwidgets>
      <customwidget>
       <class>MyGroupBox</class>
       <extends>QGroupBox</extends>
       <header>mainwindow.h</header>
       <container>1</container>
      </customwidget>
     </customwidgets>
     <resources/>
     <connections/>
    </ui>
    mainwindow.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
    41
    42
    43
    44
    45
     
    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
     
    #include <QMainWindow>
    #include <QGroupBox>
    #include <QMouseEvent>
    #include <QDebug>
     
     
    namespace Ui {
    class MainWindow;
    }
     
     
    class MyGroupBox : public QGroupBox
    {
        Q_OBJECT
    public:
        explicit MyGroupBox(QWidget *parent = 0): QGroupBox(parent){}
     
    protected:
        void mouseMoveEvent( QMouseEvent * event );
    };
     
     
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
     
    public:
        explicit MainWindow(QWidget *parent = 0);
        ~MainWindow();
     
        void getMoveEventFromChild( QMouseEvent * event );
     
    private:
        Ui::MainWindow *ui;
     
    protected:
        void mouseMoveEvent ( QMouseEvent * event );
     
    };
     
    #endif // MAINWINDOW_H

    mainwindow.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
     
    #include "mainwindow.h"
    #include "ui_mainwindow.h"
     
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
     
        this->setMouseTracking( true );
        ui->groupBox->setMouseTracking( true );
    }
     
    MainWindow::~MainWindow()
    {
        delete ui;
    }
     
    void MainWindow::getMoveEventFromChild( QMouseEvent * event )
    {
        qDebug() << "MainWindow toto : " << event->pos() << endl;
    }
     
    void MainWindow::mouseMoveEvent ( QMouseEvent * event )
    {
        qDebug() << "MainWindow : " << event->pos() << endl;
    }
     
    void MyGroupBox::mouseMoveEvent ( QMouseEvent * event ) {
        ((MainWindow *)this->parent())->getMoveEventFromChild( event );
     
        qDebug() << "MyGroupBox : " << event->pos() << endl;
    }

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

Discussions similaires

  1. Récupérer les évènements clavier dans une jsp
    Par cereal dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 19/10/2008, 18h45
  2. Récupérer les événements de la molette de la souris
    Par Delbeke dans le forum Vos contributions VB6
    Réponses: 13
    Dernier message: 05/12/2007, 00h39
  3. Réponses: 1
    Dernier message: 29/06/2007, 12h03
  4. Réponses: 3
    Dernier message: 05/11/2005, 23h50
  5. [JACOB] récupérer les événements d'objet COM
    Par zlavock dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 12/05/2005, 13h07

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