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 :

clavier avec Qt


Sujet :

Qt

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 15
    Points : 6
    Points
    6
    Par défaut clavier avec Qt
    Bonjour tout le monde.
    je travaille sur une application embarqué. ma formation est orineté systèmes et mon projet contient une partie purement C++ (Qt embedde).
    donc j aurrai besoin de votre aide sur un point qui me bloque enormement.
    je veux detecter l appuie sur des touches bien defeni pour changer un parametre que je l'utilise dans une autre classe.
    donc j ai essayé de lire les doc de Qt mais en vain voila un petit essai que j l ai fait mais il m donne tonne d'erreur:
    fichier .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
    #ifdefine CLAV_H
    #define CLAV_H
    #include <QtGui>
    #include<iostream>
    using namespace std;
    class QQWidget;
    class QKeyEvent;
    class Exemple: public QQWidget
    {
    Q_OBJECT
    public:
    int a;
    Exemple(QWidget* parent = 0);
     
    public slots:
    virtual void keyPressEvent(QKeyEvent * event);
    void update();
     
    signals:
    void keyPress(QKeyEvent *);
    void timeout();
     
    }
    #endif
    ******************
    fichier .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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    #include "clav.h"
    //#include<QLabel>
    extern QWidget w;
    Exemple::Exemple(QWidget *parent):QQWidget(parent)
    {
         QTimer *timer = new QTimer(this);
         QObject::connect(timer, SIGNAL(timeout()), this, SLOT(update()));
         timer->start(1000);
         connect(parent, SIGNAL(keyPress(QKeyEvent*)), SLOT(keyPressEvent(QKeyEvent*)));
         //e = new Exemple(this);
     
    }
    void Exemple::keyPressEvent(QKeyEvent * event)
    {
     
     
        //QQWidget::keyPressEvent ( event );
        switch (event->key())
    	{
    	case Qt::Key_M:
    		a=1;
    	break;
        case Qt::Key_L:
    		a=2;
    	break;
     
     
        }
        QQWidget::keyPressEvent ( event );
        emit keyPress(event);
     
    }
    void Exemple::update()
    {
            cout >> a;
            //emit keyPressed(event);
     
    }
    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);
    QWidget w;
    Exemple exemple(&w);
     
    w.show();
    return app.exec();
    }

  2. #2
    Membre éclairé Avatar de LeXo
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 147
    Points : 868
    Points
    868
    Par défaut
    Tout d'abord bienvenue sur le forum.

    Pour que ton post soit bien lisible, utilise la balise Code "#" ..

    et ta question c'est : tu as des soucis avec ton code et t'as des erreurs
    si c'est cela, il faudrait un peu plus d'explication... parce que pour le moment c'est vague
    donnes-nous plus d'infos
    Plzzz pas de questions par MP.

  3. #3
    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
    Salut,

    Qu est ce qu'une QQWidget ?
    Es tu sûr que QWidget à un signal keyPress ?
    On utilise pas plutot l'opérateur << avec cout ?
    On ne met pas un ";" à la fin des classes normalement ?

    Si tu résous déjà ces problèmes, ta situation devrait s'éclaircir.
    Un problème avec Qt ? Vous trouverez votre réponse ici : http://doc.trolltech.com/4.6/overviews.html
    En français (traduction réalisée par l'équipe Qt de DVP) : http://qt.developpez.com/doc/4.6/vues-d-ensemble/

  4. #4
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 15
    Points : 6
    Points
    6
    Par défaut Balises code
    pardon pour le retadr je viens de lire ton reponse.
    en fait j essaie de faire un petit teste qui affiche la valeur d'une varible privé d'une class, et cette valeur est liée au clavier par exemple si j appuie qur M je dois avoir 1. voila je suis entrain d faire un autre test le voici mais il est plein d'erreurs :
    ah pardon pr l truc '#.. j l ai pas saisi j ss pas fort en info


    "#"..
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    #ifndef CLAV_H
    #define CLAV_H
    #include <QtGui>
    #include<iostream>
    using namespace std;
    class QWidget;
    class QKeyEvent;
    class Exemple: public QWidget
    {
    Q_OBJECT
     
    public:
     
     
    Exemple(QWidget* parent = 0);
     
    public slots:
    virtual void keyPressEvent(QKeyEvent * event);
    void update();
     
    signals:
    void keyPress(QKeyEvent *);
    void timeout();
    }
    class test:QKeyEvent
    {
        public:
        test();
        int a;
    }
    #endif
    "#"
     
    -------------------------------------------------------
     
    le fichier .cpp
     
     
    #include "clav.h"
     
    QKeyEvent event0;
    Exemple::Exemple(QWidget *parent):QWidget(parent)
    {
         QTimer *timer = new QTimer(this);
         QObject::connect(timer, SIGNAL(timeout()), this, SLOT(update()));
         timer->start(1000);
         connect(parent, SIGNAL(keyPress(QKeyEvent*)), SLOT(keyPressEvent(QKeyEvent*)));
         //e = new Exemple(this);
     
    }
    void Exemple::keyPressEvent(QKeyEvent * event)
    {
     
        //Exemple e;
        //QQWidget::keyPressEvent ( event );
        switch (event->key())
    	{
    	case Qt::Key_M:
    		event0.a=1;
    	break;
        case Qt::Key_L:
    		event0.a=2;
    	break;
     
     
        }
        QWidget::keyPressEvent ( event );
        emit keyPress(event);
     
    }
    void Exemple::update()
    {
     
            cout >> event0.a;
            emit keyPressed(event);
     
    }
    test::test(){}
    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);
    QWidget w;
    Exemple exemple(&w);
     
    w.show();
    return app.exec();
    }

  5. #5
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    Merci Gulish pour le truc de ; aprés les classes
    n'hesitez pas frero d'ajouter vos remarques. j suis dans la merde ca fait une semaine que je suis bloqué dans le meme point .

  6. #6
    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
    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
    #include <QtGui>
    #include <QtCore>
     
    class MyTest : public QWidget
    {
    public:
    	MyTest ( QWidget * parent = 0, Qt::WindowFlags f = 0 ) : QWidget  (parent,f){};
     
    protected:
     
    	void keyPressEvent(QKeyEvent *event)
    	{
    		qDebug()<<event->text();
    		event->accept();
    	}
    };
     
     
     
    int main(int argc, char** argv)
    {
    	QApplication app(argc, argv);
    	MyTest test;
    	test.show();
    	return app.exec();
    }
    Voici un code minimaliste qui devrait te plaire.

    Edit : la sortie qDebug() se fait sur la console (comme std::cout). N'oublie pas d'ajouter "CONFIG+=console" à ton .pro.

    G.
    Un problème avec Qt ? Vous trouverez votre réponse ici : http://doc.trolltech.com/4.6/overviews.html
    En français (traduction réalisée par l'équipe Qt de DVP) : http://qt.developpez.com/doc/4.6/vues-d-ensemble/

  7. #7
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 15
    Points : 6
    Points
    6
    Par défaut Balises code
    thanks Gulish.
    je suis entrain de tester ton code . c'est vrai il ya une difference entre un code d'electronicien et cel d'un info.
    je pense que ton code va m eclaisir la notion de QkeyEvent. mais je pense il ne va resolu mon probleme en fait le projet que je travail la dessus c'est en fait la recriture d'un logiciel embarqué developpé avec gtk+ et cairo mais cette fois avec Qt embedde pour la question de serveur X pour ameliorer le temps de reponse.
    la partie graphique j l ai accomplie avec succée mais la gestion d'evenement m tue. voila une partie du code que j essaie la traduire en Qt
    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
     g_signal_connect((gpointer) window1, "key_press_event", G_CALLBACK(on_window1_key_press_event), NULL);
     g_signal_connect((gpointer) window1, "key_release_event", G_CALLBACK(on_window1_key_release_event), NULL);
     
    gboolean on_window1_key_press_event(GtkWidget *widget, GdkEventKey *event, gpointer user_data)
    {
     if(event->keyval == GDK_q)				quitter();
     else if(event->keyval == Menu_key)		clic[0] = 1;
     else if(event->keyval == Lplus_key)	clic[1] = 1;
     else if(event->keyval == Lmoins_key)	clic[2] = 1;
     else if(event->keyval == JourNuit_key)	clic[3] = 1;
     //if(clic[0]+clic[1]+clic[2]+clic[3] == 4)
     	//g_get_current_time(&debut_clic);
     return TRUE;
    }
    Comme vous remarquez il utilse la notion de connect donc j essaie pas d s'eloigné de cette piste. pardon pour ce long message

  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
    Alors deja utilise la balise [CODE] (c'est le # en haut) quand tu mets du code. C'est bien plus joli et bien plus lisible.

    Deuxièmement, si tu veux qu'on t'aide, et donc gagner du temps, il faut d'abord que tu prennes le temps d'écrire correctement. Ca veut dire avec le moins de fautes possibles, et avec une syntaxe claire. Essaie de te relire, ça sera un bon début.

    Ensuite, la notion de "connect signaux/slots" existe également dans Qt. Résoudre ton problème ne devrait donc pas être insurmontable.

    Et plutot que de donner un code aussi brut, utilisant une bibliothèque que tout le monde ne connait pas forcement, essaie de décrire avec des phrases claires ce que tu cherches à faire.

    Et regarde dans la FAQ, il existe des exemples simples d'utilisation des signaux/slots Qt.

    G.
    Un problème avec Qt ? Vous trouverez votre réponse ici : http://doc.trolltech.com/4.6/overviews.html
    En français (traduction réalisée par l'équipe Qt de DVP) : http://qt.developpez.com/doc/4.6/vues-d-ensemble/

  9. #9
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    pardon j'ai précipité un peu et je n ai pas fait attention a mon orthographe, je suis tout a fait d'accord avec vous. si non pour l'aide que j'ai demandé se limite à corriger l'exemple que j l'ai posé en 1er. et pour le dernier message c'etait juste une reaction a votre reponse je voulais juste expliquer plus mon probleme mais Bon pas grave. en tout merci pour ton exemple je continuerai a lire les doc c'est mieu pour moi.

    ah j'ai oublié d'ajouter une chose la question de mettre une balise. je suis pas habituer a ces mots technique bien sur j essaié de l'ajouter dans mon 2eme exemple mais j ai pas reussi a le mettre.

  10. #10
    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
    Pour la balise [CODE], il te suffit de sélectionner le texte que tu veux mettre dedans, puis tu appuies sur le #. C'est pas plus compliqué que ça .

    G.
    Un problème avec Qt ? Vous trouverez votre réponse ici : http://doc.trolltech.com/4.6/overviews.html
    En français (traduction réalisée par l'équipe Qt de DVP) : http://qt.developpez.com/doc/4.6/vues-d-ensemble/

Discussions similaires

  1. Problème clavier avec command.com
    Par SLE dans le forum Autres Logiciels
    Réponses: 4
    Dernier message: 26/04/2006, 15h48
  2. [VB6] Comment Désactiver et activer le clavier avec VB6
    Par filton dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 08/03/2006, 14h14
  3. Réponses: 5
    Dernier message: 29/12/2005, 15h03
  4. Scrutation du clavier avec DirectInput
    Par Mark53 dans le forum DirectX
    Réponses: 9
    Dernier message: 17/12/2004, 10h50
  5. Le buffer clavier avec cin, et getch()
    Par Info420 dans le forum SL & STL
    Réponses: 1
    Dernier message: 06/12/2004, 12h45

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