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

C++ Discussion :

Événement souris - Linux


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2017
    Messages : 4
    Par défaut Événement souris - Linux
    Bonjour,

    Je suis actuellement en train de développer une petite application pour une boîte de robotique, et je cherche à mettre dans mon application une sorte de boucle while en attende d'un événement de ma souris :"Tant que l'utilisateur d'un pas fait d'appui gauche de la souris, on attend".

    J'ai donc testé sur un programme appart certaines fonctions qui sont données par ce lien qui explique tout sur les hooks sous linux :
    ftp://ftp-developpez.com/buffa/xwindow/xwindow.pdf

    Et voici le programme que j'ai réussi à taper (qui je le répète ne sert qu'à savoir si un clic à été fait ou non) :

    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
     
    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include <X11/X.h>
    #include <X11/Xlib.h>
    #include <QDebug>
    #include <qtextstream.h>
    #include <QTextStream>
     
    typedef union _XEvent {
        int type;
        XButtonEvent xbutton;
    }XEvent;
     
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    }
     
    MainWindow::~MainWindow()
    {
        delete ui;
    }
     
    void MainWindow::on_pushButton_clicked()
    {
        if (ButtonPress==1)
        {
            if (Button1==1)
            {
                qDebug()<<"boutton pressé !";
            }
        }
    }
    Et voici les erreurs de compilation que j'obtiens qui ne m'aide en rien... :

    /usr/include/arm-linux-gnueabihf/qt5/QtCore/qtextstream.h:54: error: #error qtextstream.h must be included before any header file that defines Status
    #error qtextstream.h must be included before any header file that defines Status
    ^
    /usr/include/arm-linux-gnueabihf/qt5/QtCore/qtextstream.h:80: error: expected identifier before 'int'
    enum Status {
    ^
    /usr/include/arm-linux-gnueabihf/qt5/QtCore/qtextstream.h:80: error: expected unqualified-id before '{' token
    enum Status {
    ^
    /home/pi/programme/Vincent.D/Programme/MyMaps/test_clique/mainwindow.cpp:9: error: redefinition of 'union _XEvent'
    typedef union _XEvent {
    ^
    /usr/include/X11/Xlib.h:985: error: previous definition of 'union _XEvent'
    typedef union _XEvent {
    ^
    /home/pi/programme/Vincent.D/Programme/MyMaps/test_clique/mainwindow.cpp:12: error: invalid type in declaration before ';' token
    }XEvent;
    ^
    /home/pi/programme/Vincent.D/Programme/MyMaps/test_clique/mainwindow.cpp:12: error: conflicting declaration 'typedef int XEvent'


    Je n'arrive pas à comprendre d'où viennent mes erreurs car l'emplacement des erreurs indiqué se trouve dans des fichiers que je n'ai jamais vus auparavant...

    Voilà, si vous avez la moindre remarque à me faire sur mon programme ou sur les erreurs que j'obtiens qui pourrait m'aider à les résoudre, je suis preneur !

    Merci d'avance pour vos réponses,
    Cordialement,
    Vincent. D

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Salut,

    as-tu essayé de qtextstream.h must be included before any header file that defines Status ?
    Parce que ce fichier, c'est toi qui l'inclut, et l'erreur te dit spécifiquement qu'il faut l'inclure plus tôt à priori.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2017
    Messages : 4
    Par défaut
    Citation Envoyé par Bousk
    Salut,

    as-tu essayé de qtextstream.h must be included before any header file that defines Status ?
    Parce que ce fichier, c'est toi qui l'inclut, et l'erreur te dit spécifiquement qu'il faut l'inclure plus tôt à priori.
    Cela m'a permis d'enlever 3 erreurs merci ! Il me reste ces erreurs-là :

    /home/pi/programme/Vincent.D/Programme/MyMaps/test_clique/mainwindow.cpp:9: error: redefinition of 'union _XEvent'
    typedef union _XEvent {
    ^
    /usr/include/X11/Xlib.h:985: error: previous definition of 'union _XEvent'
    typedef union _XEvent {
    ^
    /home/pi/programme/Vincent.D/Programme/MyMaps/test_clique/mainwindow.cpp:12: error: invalid type in declaration before ';' token
    }XEvent;
    ^
    /home/pi/programme/Vincent.D/Programme/MyMaps/test_clique/mainwindow.cpp:12: error: conflicting declaration 'typedef int XEvent'

    2 d'entre elles m'indiquent que c'est mon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    typedef union _XEvent {
    ...
    }XEvent;
    qui pose problème, pourtant ça ma l'air bien construit, je me trompe ?

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    A nouveau, je t'invite à lire l'erreur.
    Une erreur redefinition of xxx veut bien dire ce que ça veut dire : un truc est déjà défini avec ce nom. Ce qui est impossible parce que le compilo perdrait la tête à savoir laquelle tu veux vraiment utiliser.

    C'est pour ça qu'on utilise #pragma once dans les fichier d'en-tête en général.
    Ou le combo
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #ifndef DEFINE_POUR_MON_FICHIER
    #define DEFINE_POUR_MON_FICHIER
     
    #endif // DEFINE_POUR_MON_FICHIER
    Et pourquoi redéfinir cette union dans le .cpp alors que tu inclues déjà le fichier header ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    bah, pour commencer, en C++, il n'y a pas lieu de faire un typedef quand on défini un type: le nom de l'union est déjà introduit.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    union XEvent {
    ...
    };
    A priori, c'est parce qu'il trouve déjà un _XEvent.
    D'ailleurs, ta deuxième ligne te dit ou elle se trouve. Ne redéfinit pas cette union.

    A savoir: tout nom commencant par un underscore suivit d'une majuscule (comme _X) est strictement réservé.

  6. #6
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2017
    Messages : 4
    Par défaut
    Bonjour,

    Merci beaucoup pour ces indications, j'ai pu en apprendre un peu plus ! Si j'ai bien compris, ce qui est en fait dit sur le _XEvent, c'est que celui-ci fait partie de la librairie que j'ai déjà incluse dans l'en-tête.

    Voilà, du coup j'arrive à compiler sans erreur ni warning avec le code suivant :
    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
     
    #include <qtextstream.h>
    #include <QTextStream>
    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include <X11/Xlib.h>
    #include <QDebug>
     
     
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    }
     
    MainWindow::~MainWindow()
    {
        delete ui;
    }
     
    void MainWindow::on_pushButton_clicked()
    {
        qDebug()<<"entrer push_button";
        if (ButtonPress==1)
        {
            qDebug()<<"premier if";
            if (Button1==1)
            {
                qDebug()<<"boutton pressé !";
            }
        }
    }
    Lorsque je lance mon programme et que j'appuie sur mon bouton "PushButton", mes qDebug me permettent de savoir où je me trouve dans le programme et j'arrive bien à entrer dans la fonction "on_pushButton_clicked() mais lorsque j'appuie quelque part, le programme ne me renvoie rien c'est que mon programme ne rentre pas dans mes if...
    Avez-vous des solutions ou des propositions qui pourraient m'aider ?
    Merci d'avance...

  7. #7
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Cool, ton problème de compilation est résolu.
    A partir de là, c'est du Qt, qui n'est pas du tout dans mes cordes.

    A tout hasard, c'est quoi ces deux 1? Pourquoi n'as-tu pas deux variables (ou constantes) dédiées?

Discussions similaires

  1. [JTextPane] Ajouter un évènement souris sur un mot
    Par soad dans le forum AWT/Swing
    Réponses: 12
    Dernier message: 20/03/2007, 15h12
  2. Réponses: 2
    Dernier message: 17/11/2006, 13h48
  3. [Débutant]Gestion des évènements souris
    Par bubu251 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 06/10/2006, 11h49
  4. [FLASH MX2004] Les actions des événements souris ne fonctionnent plus
    Par Demco dans le forum ActionScript 1 & ActionScript 2
    Réponses: 7
    Dernier message: 21/04/2006, 21h37
  5. [wxpython] problème avec les événements souris
    Par kalimero dans le forum wxPython
    Réponses: 2
    Dernier message: 13/11/2005, 15h42

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