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 :

Manipulation des QMouseEvent


Sujet :

Qt

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Janvier 2009
    Messages : 33
    Points : 28
    Points
    28
    Par défaut Manipulation des QMouseEvent
    Bonjour,

    Mon objectif est de capter la position de la souris dans une fenêtre QWebView de WebKit et l'afficher à tout instant. Les erreurs affichiée lors de la compilation, c'est en rapport avec le QLineEdit et le QBoxLayout. Peut-être que je les utilise mal. Quelqu'un pourrait-t-il m'aider? Voici mon code:

    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
     
    #include <QtGui/QApplication>
    #include <QtWebKit>
    #include <QtGui/QMouseEvent>
    #include <QtGui/QLineEdit>
    #include <QtGui/QBoxLayout>
    #include <QObject>
    #include "Window.h"
     
    FenPrincipale::FenPrincipale(){
        QWebView *view = new QWebView();
        view->load(QUrl("http://127.0.0.1/TAJP/"));
        view->show();
        QObject::connect(view, SIGNAL(mouseMoveEvent(event)), this, SLOT(displayPosition()));
     
        QWidget *DisplayPos= new QWidget(this);
        editPosX= new QLineEdit;
        editPosY= new QLineEdit;
        QBoxLayout *Box= new QBoxLayout;
        Box->addWidget(editPosX);
        Box->addWidget(editPosY);
        DisplayPos->setLayout(Box);
    }
     
    void FenPrincipale::mouseMoveEvent ( QMouseEvent * event )
    {
        posX = event->x();
        posY = event->y();
        QWidget::mouseMoveEvent(event);
    }
     
    void FenPrincipale::displayPosition(){
        while(true)
           {
                editPosX->setText(QString::number(posX));
                editPosY->setText(QString::number(posY));
           }
    }

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Salut
    Citation Envoyé par abir_rzg Voir le message
    Les erreurs affichiée lors de la compilation, c'est en rapport avec le QLineEdit et le QBoxLayout.
    Peut tu montrer quel sont ces erreurs?


    Il existe cette fonction qui permet de connaitre la position de la souris à tout instant
    http://qt.developpez.com/doc/4.5/qcursor/#pos

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Janvier 2009
    Messages : 33
    Points : 28
    Points
    28
    Par défaut
    Voici ce que j'ai eu en résultat de la compilation:

    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
     
    mingw32-make -f Makefile.Debug
    mingw32-make[1]: Entering directory `C:/d/dev/test/webkitapp'
    g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -
    DQT_DLL -DQT_WEBKIT_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEED
    S_QMAIN -I"..\..\qt\qt\include\QtCore" -I"..\..\qt\qt\include\QtGui" -I"..\..\qt
    \qt\include\QtWebKit" -I"..\..\qt\qt\include" -I"." -I"." -I"..\..\qt\qt\include
    \ActiveQt" -I"debug" -I"." -I"..\..\qt\qt\mkspecs\win32-g++" -o debug\main.o mai
    n.cpp
    g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -
    DQT_DLL -DQT_WEBKIT_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEED
    S_QMAIN -I"..\..\qt\qt\include\QtCore" -I"..\..\qt\qt\include\QtGui" -I"..\..\qt
    \qt\include\QtWebKit" -I"..\..\qt\qt\include" -I"." -I"." -I"..\..\qt\qt\include
    \ActiveQt" -I"debug" -I"." -I"..\..\qt\qt\mkspecs\win32-g++" -o debug\Window.o W
    indow.cpp
    Window.cpp: In constructor `FenPrincipale::FenPrincipale()':
    Window.cpp:16: error: no match for 'operator=' in '((FenPrincipale*)this)->FenPr
    incipale::editPosX = (((QLineEdit*)operator new(20u)), (<anonymous>->QLineEdit::
    QLineEdit(0u), <anonymous>))'
    ../../qt/qt/include/QtGui/../../src/gui/widgets/qlineedit.h:267: note: candidate
    s are: QLineEdit& QLineEdit::operator=(const QLineEdit&)
    Window.cpp:17: error: no match for 'operator=' in '((FenPrincipale*)this)->FenPr
    incipale::editPosY = (((QLineEdit*)operator new(20u)), (<anonymous>->QLineEdit::
    QLineEdit(0u), <anonymous>))'
    ../../qt/qt/include/QtGui/../../src/gui/widgets/qlineedit.h:267: note: candidate
    s are: QLineEdit& QLineEdit::operator=(const QLineEdit&)
    Window.cpp:18: error: no matching function for call to `QBoxLayout::QBoxLayout()
    '
    ../../qt/qt/include/QtGui/../../src/gui/kernel/qboxlayout.h:126: note: candidate
    s are: QBoxLayout::QBoxLayout(const QBoxLayout&)
    ../../qt/qt/include/QtGui/../../src/gui/kernel/qboxlayout.h:68: note:
          QBoxLayout::QBoxLayout(QBoxLayout::Direction, QWidget*)
    Window.cpp:19: error: no matching function for call to `QBoxLayout::addWidget(QL
    ineEdit&)'
    ../../qt/qt/include/QtGui/../../src/gui/kernel/qboxlayout.h:85: note: candidates
     are: void QBoxLayout::addWidget(QWidget*, int, Qt::Alignment)
    Window.cpp:20: error: no matching function for call to `QBoxLayout::addWidget(QL
    ineEdit&)'
    ../../qt/qt/include/QtGui/../../src/gui/kernel/qboxlayout.h:85: note: candidates
     are: void QBoxLayout::addWidget(QWidget*, int, Qt::Alignment)
    Window.cpp: In member function `void FenPrincipale::displayPosition()':
    Window.cpp:34: error: base operand of `->' has non-pointer type `QLineEdit'
    Window.cpp:35: error: base operand of `->' has non-pointer type `QLineEdit'
    mingw32-make[1]: *** [debug/Window.o] Error 1
    mingw32-make[1]: Leaving directory `C:/d/dev/test/webkitapp'
    mingw32-make: *** [debug] Error 2

  4. #4
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Il y a pas mal d'erreur dans ton code je pense:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    QWebView *view = new QWebView();
    QWidget *DisplayPos= new QWidget(this);
    Tu ne pourra jamais récupérer le pointeur sur tes différents objets... Penser aux variables membres.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     QObject::connect(view, SIGNAL(mouseMoveEvent(event)), this, SLOT(displayPosition()));
    mouseMoveEvent(event) n'est pas un signal de QWebView, non ?

    Je pense que tu devrait regarder le lien de Yan et voir si cela peu correspondre a tes besoins. Après regarde comment on utilise les differents event avec Qt.

    EDIT:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      while(true)
           {
                editPosX->setText(QString::number(posX));
                editPosY->setText(QString::number(posY));
           }
    Je ne sais pas vraiment ce que tu veux faire mais la boucle infini je ne pense pas que cela soit un très bonne idée...
    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.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Janvier 2009
    Messages : 33
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par superjaja Voir le message
    Il y a pas mal d'erreur dans ton code je pense:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    QWebView *view = new QWebView();
    QWidget *DisplayPos= new QWidget(this);
    Tu ne pourra jamais récupérer le pointeur sur tes différents objets... Penser aux variables membres.
    J'ai aucune idée de ce dont tu parle ici. Peut-tu m'expliquer STP?
    Citation Envoyé par superjaja Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     QObject::connect(view, SIGNAL(mouseMoveEvent(event)), this, SLOT(displayPosition()));
    mouseMoveEvent(event) n'est pas un signal de QWebView, non ?
    Alors comment faire pour pister la position de la souris dans un QWebView?
    Citation Envoyé par superjaja Voir le message
    Je pense que tu devrait regarder le lien de Yan et voir si cela peu correspondre a tes besoins. Après regarde comment on utilise les differents event avec Qt.
    J'ai essayé avec la methode de Yan mais j'ai les mêmes erreurs.

  6. #6
    Membre averti
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Points : 333
    Points
    333
    Par défaut
    Tu as supprimé (ou mis en commentaire) les parties de ton code devenues obsolètes?

    On peut avoir une copie du code après modif?

    Quelles sont les nouvelles erreurs?

    Utiliser les données membres ça signifie créer des attributs de ta classe qui ont pour rôle de stocker une copie du pointeur vers tes objets. De cette façon, tu peux y avoir accès n'importe où dans ta classe, à partir de cet attribut.
    Un clavier Azerty en vaut deux.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Janvier 2009
    Messages : 33
    Points : 28
    Points
    28
    Par défaut
    Voilà le nouveau code:
    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
    FenPrincipale::FenPrincipale(){
        QWebView *view = new QWebView();
        view->load(QUrl("http://127.0.0.1/TAJP/"));
        view->show();
        //QObject::connect(view, SIGNAL(mouseMoveEvent(event)), this, SLOT(displayPosition()));
     
        QWidget *DisplayPos= new QWidget(this);
        editPosX= new QLineEdit;
        editPosY= new QLineEdit;
        QBoxLayout *Box= new QBoxLayout;
        Box->addWidget(editPosX);
        Box->addWidget(editPosY);
        DisplayPos->setLayout(Box);
    }
     
    void FenPrincipale::displayPosition(){
        while(true)
           {
                sourisG = QCursor::pos();
                souris = QWidget::mapFromGlobal(souris);
                posX = souris.x();
                posY = souris.y();
                editPosX->setText(QString::number(posX));
                editPosY->setText(QString::number(posY));
           }
    }
    ET voici les erreurs qui restent:
    Window.cpp: In constructor `FenPrincipale::FenPrincipale()':
    Window.cpp:20: error: no matching function for call to `QBoxLayout::QBoxLayout()'
    ../../qt/qt/include/QtGui/../../src/gui/kernel/qboxlayout.h:126: note: candidates are: QBoxLayout::QBoxLayout(const QBoxLayout&)
    ../../qt/qt/include/QtGui/../../src/gui/kernel/qboxlayout.h:68: note: QBoxLayout::QBoxLayout(QBoxLayout:irection, QWidget*)

  8. #8
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    J'ai regarder rapidement dans la doc mais je crois qu'il n'y a pas de constructeur de ce type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QBoxLayout *Box= new QBoxLayout;
    Pour l'autre erreur peux tu montrer comment est déclarer le constructeur dans le .h :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FenPrincipale::FenPrincipale()
    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.

  9. #9
    Membre averti
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Points : 333
    Points
    333
    Par défaut
    Les déclarations de sourisG, souris, posX et posY sont faites dans le .h?

    Peut-on l'avoir en entier?

    Il me semble aussi qu'il n'existe pas de constructeur QBoxLayout, tu dois préciser la direction ou utiliser QVBoxLayout / QHBoxLayout.
    Un clavier Azerty en vaut deux.

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Janvier 2009
    Messages : 33
    Points : 28
    Points
    28
    Par défaut
    j'ai corrigé le QBoxLayout en QHBoxLayot 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    FenPrincipale::FenPrincipale(){
        QWebView *view = new QWebView();
        view->load(QUrl("http://127.0.0.1/TAJP/"));
        view->show();
     
        QWidget *DisplayPos= new QWidget(this);
        editPosX= new QLineEdit;
        editPosY= new QLineEdit;
        QHBoxLayout * HBox= new QHBoxLayout;
        HBox->addWidget(editPosX);
        HBox->addWidget(editPosY);
        DisplayPos->setLayout(HBox);
    }
     
    void FenPrincipale::displayPosition(){
        while(true)
           {
                sourisG = QCursor::pos();
                souris = QWidget::mapFromGlobal(souris);
                posX = souris.x();
                posY = souris.y();
                editPosX->setText(QString::number(posX));
                editPosY->setText(QString::number(posY));
           }
    }
    voici le .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
     
    class FenPrincipale : QWidget //: public QMainWindow
     {
         Q_OBJECT
     
     public:
         FenPrincipale();
         void displayPosition();
     
     private:
         QPoint sourisG, souris;
         int posX;
         int posY;
         QLineEdit * editPosX;
         QLineEdit * editPosY;
     
     };
    cette foi la compilation a réussi mais quand j'exécute la position ne s'affiche pas.

  11. #11
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par abir_rzg Voir le message
    cette foi la compilation a réussi mais quand j'exécute la position ne s'affiche pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    void FenPrincipale::displayPosition(){
        while(true)
           {
                sourisG = QCursor::pos();
                souris = QWidget::mapFromGlobal(souris);
                posX = souris.x();
                posY = souris.y();
                editPosX->setText(QString::number(posX));
                editPosY->setText(QString::number(posY));
           }
    }
    Avec uen boucle infinie ca risque pas ed marcher
    Utilise un Timer qui va appeler ta fonction displayPosition()(sans le while bien sure) tous les x ms.
    http://qt.developpez.com/faq/?page=qt4Core#QTimer

  12. #12
    Membre averti
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Points : 333
    Points
    333
    Par défaut
    Ya un moment où tu appelle la méthode show d'une instance de ta classe FenPrincipale ?

    Si ce n'est pas le cas, tu ne verra apparaitre que ta QWebView (puisque tu l'affiche (volontairement?) avec un show dans le constructeur de FenPrincipale.
    Un clavier Azerty en vaut deux.

Discussions similaires

  1. [IB6][BCB5]Manipulation des dates.
    Par Sitting Bull dans le forum SQL
    Réponses: 4
    Dernier message: 09/04/2004, 15h33
  2. [xml]manipuler des données xml sous Oracle9i
    Par crazy dans le forum SQL
    Réponses: 7
    Dernier message: 28/02/2004, 11h40
  3. Manipuler des dates...
    Par Ti Jen-tsie dans le forum Langage
    Réponses: 4
    Dernier message: 26/06/2003, 11h46
  4. Manipulation des handle contexte
    Par rockbiker dans le forum DirectX
    Réponses: 1
    Dernier message: 09/05/2003, 18h51
  5. Fonctions de manipulation des chaines et des dates
    Par Fares BELHAOUAS dans le forum Débuter
    Réponses: 3
    Dernier message: 09/11/2002, 22h43

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