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 :

Condition sur l'appui de bouton ?

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 102
    Points : 42
    Points
    42
    Par défaut Condition sur l'appui de bouton ?
    Bonjour à tous,

    Savez vous si il est possible de faire une condition "ou" sur l'appui de bouton ?

    Je m'explique . Pour ceux qui m'on pas suivis, j'aimerais piloter un robot avec mon app. Pour ce faire, j'ai 4 boutons avancer, reculer, droite et gauche.

    Pour le moment j'ai réussis à le faire avancer et reculer parfaitement(ce fut laborieux quand même ). Cependant je trouve mon code pas propre car, il utilise 2 méthodes par boutons ( pressed et released).
    Ce qui me ferais au total 8 méthodes. c'est lourd ! ( mais faisable j'en convient) .

    Etant perfectionniste, je souhaiterais savoir la faisabilité de connaitre si l'un de 4 boutons et pressé ou relâché alors j'effectue une méthode. Et le choix du bouton se fera dans la méthode.
    Ainsi je n'aurais que 2 méthodes ( pressed et released). et à l'intérieur de ces deux méthodes, je regarde quel bouton à été pressé ou relâché ?

    Voici une partie de mon Header :
    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
    //********************************************************************************************************
    // Ici je créer mes slots public pour que l'utilisateur puisse s'en servir
    //********************************************************************************************************
      public slots:
     
          void on_Bouton_Av_released();
          void on_Bouton_Av_pressed();      //slot click du bouton quand on click sur le bouton pour avancer
          void on_Bouton_Ar_released();
          void on_Bouton_Ar_pressed();     //slot click du bouton quand on click sur le bouton pour Reculer
     
          void on_BoutonConnexion_clicked();   // slot pour se connecter au port
          void on_BoutonDeconnexion_clicked(); // slot pour se DEconnecter du au port
     
    //********************************************************************************************************
    // Ici je créer des attributs privés pour ne pas que les utilisateurs puissent les modifiés
    //********************************************************************************************************
    private:
     
        Ui::MainWindow *ui;
        QSerialPort serial;		// Je créer un attribut de type QSerialPOrt que je nomme "serial"
     
        QByteArray trame_Av = QByteArray("\x02\x00\x06\x96\x80\x80\x80\x00\x80\x92",10);
        QByteArray trame_Ar = QByteArray("\x02\x00\x06\x64\x80\x80\x80\x00\x80\x60",10);
        QByteArray trame_St = QByteArray("\x02\x00\x06\x80\x80\x80\x80\x00\x80\x84",10);
     
     
     };
    Et de mon .ccp :
    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
    /**************************************************************************
                        méthodes
    **************************************************************************/
     
    /**************************************************************************
       Cette fonction envoi la trame pour AVANCER quand on clic sur le Bouton
       Le Bouton est configuré en auto-repaeat avec delay 100ms
    **************************************************************************/
    void MainWindow::on_Bouton_Av_pressed()
    {
      if( ui->Bouton_Av->isDown() )
        {
          serial.write(trame_Av);  // J'envoie la trame au port serie
        }
        else
        {
            serial.write(trame_St); // J'envoie la trame au port serie
        }
    }
     
    //   Cette fonction envoi la trame pour ARRETER quand on relache le Bouton
    void MainWindow::on_Bouton_Av_released()
    {
        if( !ui->Bouton_Av->isDown() )
          {
            serial.write(trame_St);  // J'envoie la trame au port serie
          }
        else
         {
          serial.write(trame_Av);  // J'envoie la trame au port serie
         }
    }
    /**************************************************************************
       Cette fonction envoi la trame pour RECULER quand on clic sur le Bouton
       Le Bouton est configuré en auto-repaeat avec delay 100ms
    **************************************************************************/
    void MainWindow::on_Bouton_Ar_pressed()
    {
      if( ui->Bouton_Av->isDown() )
        {
          serial.write(trame_Ar);  // J'envoie la trame au port serie
        }
        else
        {
            serial.write(trame_St); // J'envoie la trame au port serie
        }
    }
    //   Cette fonction envoi la trame pour ARRETER quand on relache le Bouton
    void MainWindow::on_Bouton_Ar_released()
    {
        if( !ui->Bouton_Ar->isDown() )
          {
            serial.write(trame_St);  // J'envoie la trame au port serie
          }
        else
         {
          serial.write(trame_Ar);  // J'envoie la trame au port serie
         }
    }
    Peut être existe-t-il d'autre façon de faire . Je suis preneur de chaque idée, pour m’améliorer !

    Merci

  2. #2
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 102
    Points : 42
    Points
    42
    Par défaut
    Bonjour ,

    L’absence de réponse me laisse penser que c'est soit trop compliqué ou juste impossible !
    Je vais donc me faire mes 8 méthodes .

    tant pis

  3. #3
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 897
    Points : 219 630
    Points
    219 630
    Billets dans le blog
    125
    Par défaut
    Bonjour,

    Il est évident qu'un forum Internet de membres bénévoles doit répondre en moins de 24 h .
    Sinon, je pense que la réponse à votre problème se trouve dans la classe QSignalMapper.

  4. #4
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 102
    Points : 42
    Points
    42
    Par défaut
    Bonjour,

    Citation Envoyé par LittleWhite Voir le message
    Bonjour,
    Il est évident qu'un forum Internet de membres bénévoles doit répondre en moins de 24 h .
    Non bien sur que non. autant pour moi, c'est pas l'impression que je voulais donné. Étant bloqué à la maison je suis donc ultra connecté ! Et comme je bloque bien je peux rien faire sans réponse, même si je continue à chercher après mon post.

    Merci pour ta réponse .
    J'ai trouvé un super exemple à traiter pour essayer de comprendre, mais mon "noobisme" en la matière je n'ai pas réussis a compléter correctement l'exemple.
    https://qt-quarterly.developpez.com/qq-10/signalmapper/

    Encore une fois c'est dans l'organisation des fichiers ou j'ai du mal. Quoi mettre et où le mettre.

    J'ai donc essayé ceci mais j'ai des messages d'erreur . Voici ma démarche si vous pouvez me corriger dans mon raisonnement ce serait super.

    On créer un fichier main.ccp
    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 "Keypad.h"         // J'appelle le header de mon clavier
     
     
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
     
        Keypad Mon_Clavier;       // je créée un objet de type Keypad
        Mon_Clavier.show();       // J'affiche cet objet
     
        return a.exec();
    }
    Header : Mon Keypad.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
    #ifndef KEYPAD_H
    #define KEYPAD_H
     
    #include <QWidget>
    #include <QPushButton>
    #include<QGridLayout>
     
     
    // Un header contient la définition de la classe ;
    // On doit y rentre les attributs (variables) toujours en privé
    // et les méthodes (Fonctions) que l'objet peut effectuer
     
    class Keypad : public QWidget   // Keypad hérite de QWidget
    {
        Q_OBJECT                    // Obligatoire Dès que l'on doit créer un signal ou un slot
     
        public:
            explicit Keypad(QWidget *parent = nullptr); // Le constructeur  ??
     
            void createLayout();
     
     
        signals:
     
        public slots:
     
        private:
        QPushButton Buttons;
        QGridLayout *layout ;
     
    };
     
    #endif // KEYPAD_H
    et mon Keypad.ccp
    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 <QSignalMapper>
    #include <QPushButton>
    #include<QGridLayout>
     
    #include "keypad.h"
     
    Keypad::Keypad(QWidget *parent) : QWidget(parent)  // Constructeur de ma classe
    {
        QSignalMapper *signalMapper = new QSignalMapper(this);
        connect(signalMapper, SIGNAL(mapped(int)), this, SIGNAL(digitClicked(int)));
     
     
        for (int i = 0; i < 10; ++i) {
            QString text = QString::number(i);
            buttons[i] = new QPushButton(text, this);
            signalMapper->setMapping(buttons[i], i);
            connect(buttons[i], SIGNAL(clicked()), signalMapper, SLOT(map()));
        }
     
        createLayout();
    }
     
     
     
    /**************************************************************************
                        méthodes
    **************************************************************************/
    void Keypad::createLayout()
    {
     
        QGridLayout *layout = new QGridLayout(this, 3, 4);
        layout->setMargin(6);
        layout->setSpacing(6);
     
        for (int i = 0; i < 9; ++i)
            layout-&gt;addWidget(buttons[i + 1], i / 3, i % 3);
        layout->addWidget(buttons[0], 3, 1);
    }


    Dans le keypad.ccp j'ai les messages d'erreur suivants :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     QSignalMapper *signalMapper = new QSignalMapper(this);
    'QsignalMapper' is deprecated

    -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    buttons[i] = new QPushButton(text, this);
    "use of undeclared identifier 'buttons'

    -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QGridLayout *layout = new QGridLayout(this, 3, 4);
    no matching constructior for initialization of 'QGridLayout'

    -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    layout-&gt;addWidget(buttons[i + 1], i / 3, i % 3);
    use of undeclared identifier 'gt'

    Merci à vous

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 897
    Points : 219 630
    Points
    219 630
    Billets dans le blog
    125
    Par défaut
    Pour le -&gt; c'est un problème d'encodage HTML. En réalité, &gt; c'est le symbole greater than, soit le supérieur, soit >. Du coup, ça fait layout->.
    Pour le QGridLayout, il me semble que vous pouvez résoudre le problème en incluant le fichier QGridLayout.
    Sinon, n'hésitez pas à voir la documentation officielle de la classe QSignalMapper. J'ose croire que les quaterly ont un peu vieilli.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Citation Envoyé par dje8269 Voir le message
    "use of undeclared identifier 'buttons'
    Tu as déclaré QPushButton Buttons;. C++ est sensible à la casse (majuscules/minuscules). Et tu noteras que ce n'est pas un tableau.

    Citation Envoyé par dje8269 Voir le message
    no matching constructior for initialization of 'QGridLayout'
    Les deux constructeurs disponibles sont :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    QGridLayout(QWidget *parent)
    QGridLayout()
    Citation Envoyé par dje8269 Voir le message
    'QsignalMapper' is deprecated
    L'usage de la classe QSignalMapper est en effet devenue obsolète maintenant que nous avons les fonctions lambda. Avec, le code impliquant cette classe devient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::array<QPushButton*, 10> buttons;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for (std::size_t i = 0; i < buttons.size(); ++i) {
        QString text = QString::number(i);
        buttons[i] = new QPushButton(text, this);
        connect(buttons[i], &QPushButton::clicked,
                this, [i, this]() { digitClicked(i); });
    }

  7. #7
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 102
    Points : 42
    Points
    42
    Par défaut
    Bonjour Winjerome,

    Merci de m'avoir lu et de pencher sur mon probléme .

    Je pense que je m'attaque à trop dur pour mon niveau. J'ai réussis a corriger les erreurs pour voir enfin un clavier s'afficher mais pas plus ! .

    Je ne suis malheureusement pas en mesure de comprendre ton code (sans les commentaires), et encore moins de le mettre en œuvre !

    Je n’aime pas qu'on me mâche le travail, la méthode de copier/coller a ces limites. A un moment donné fait comprendre ce qu'on l'on fait. ce qui n'est pas mon cas.

    Intégrer des bouts de codes dans un code n'est pas encore à ma portée. Je vais laissé tomber cette histoire de clavier je pense.

  8. #8
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 897
    Points : 219 630
    Points
    219 630
    Billets dans le blog
    125
    Par défaut
    Je pense que je m'attaque à trop dur pour mon niveau.
    Oui, mais en même temps, c'est en s'attaquant à de nouvelles choses que l'on progresse .

  9. #9
    Invité
    Invité(e)
    Par défaut
    C'est la raison pour laquelle j'ai mis le lien vers le cours qui introduit les fonctions lambda .
    Mais s'il y a dedans ou dans le reste de mon code des choses que tu ne comprends pas, n'hésite pas à poser des questions.

  10. #10
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 102
    Points : 42
    Points
    42
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Oui, mais en même temps, c'est en s'attaquant à de nouvelles choses que l'on progresse .
    Je suis bien d'accord. Mais resté bloqué toute une journée sur un probléme , c'est ....... comment dire .....
    décourageant.

    Même en lisant les indications, les explications , ce n'est pas évident.

    Citation Envoyé par Winjerome
    Mais s'il y a dedans ou dans le reste de mon code des choses que tu ne comprends pas, n'hésite pas à poser des questions.
    En fait le probléme n'est pas de ne pas comprendre ton code. car il est difficile de se plonger dedans sans que cela fonctionne.
    Le plus dur c'est d'obtenir un code qui compile. Si le code compilait je pourrais l'étudier ligne par ligne au moins et avoir le sentiments d'avancer.

    Ce qui reviendrai à vous demander de me faire un code utilisant ces fonctions. Et comme me l'a rappeler LittleWhite, vous êtes des volontaires et avez d'autres choses à faire ce qui est complétement normal .

  11. #11
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 897
    Points : 219 630
    Points
    219 630
    Billets dans le blog
    125
    Par défaut
    Mais resté bloqué toute une journée sur un probléme , c'est ....... comment dire .....
    décourageant.
    Oui, c'est souvent le cas en informatique et cela même à un niveau pro. Il arrive que ce soit des fautes d'inattentions, ou juste que l'on avance pas. Pour réussir, c'est de la persévérance.

    Le plus dur c'est d'obtenir un code qui compile
    Autant que j'ai vu, Winjerome a apporté des indications sur comment le faire compiler. Après, si c'est vraiment bloqué, y a le forum , faut pas croire que l'on refuse de vous aider . Aussi, on peut le voir comme un entrainement. Il n'est pas rare, même pour des gens du métier, de prendre un code (ou un projet) sur Internet et qui ne compile pas du premier coup. C'est même courant.

Discussions similaires

  1. Impulsion sur l'appui d'un bouton
    Par Fr33dom dans le forum VB.NET
    Réponses: 4
    Dernier message: 18/01/2011, 18h34
  2. [XL-2003] Boucle avec condition sur bouton ok
    Par zoumzoum59 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/01/2010, 11h50
  3. condition sur un bouton
    Par atlantideD dans le forum IHM
    Réponses: 6
    Dernier message: 02/07/2007, 16h00
  4. Condition sur un bouton radio
    Par xenos dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 09/08/2006, 11h55

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