Bienvenue sur le forum !

Si vous souhaitez rejoindre la communauté, cliquez sur l'un de ces boutons !

Qt 5 : 5.9.1 - Qt Creator : 4.3.1 - Qt Installer : 2.0.3 - JOM : 1.1.2 - Qt Build suite : 1.7.0 - VS Qt 5 : 2.0.0

clavier numerique

2»

Réponses

  • tu as raison en effet, ca compile et ca fonctionne

    Je vais faire un petit bilan de la méthode pour l'apprendre et la reproduire car je vais en avoir besoin

    Je te remercie infiniment myrddin772, tu as vraiment aider sur ce coup la tout fonctionne correctement et le résultat s'affiche bien dans la page suivante

    On va clotturer la conversation sur ce hors-sujet car je voudrai pas faché les administrateurs ( ce que je comprendrai )

    Pour en revenir au clavier numérique, il fonctionne également parfaitement
    J'en ai meme fait un clavier alphabétique sur le meme principe
    seul bemol c'est la touche qui me permet d'effacer les caracteres, la touche retour au dessus de Entrée ( <-- )
  • Une petite question
    Lorsque l'on créer un clavier numérique, comment fait on pour que lorsqu'on tape sur les touches ( des QPushButton ) il inscrive les lettres dans le QLinEdit sélectionné c'est à dire dans le QLineEdit où est actuellement le curseur ?
    Et comment fait on la fonction "effacer" ?
  • J'avais trouvé un moyen de faire ça :
    À chaque fois qu'un QLineEdit prend le focus, on actualise un pointeur en lui donnant l'adresse du QLineEdit en cours.
    Quand tu tapes sur un bouton, tu ajoutez au texte du QLineEdit pointé.
    Pour effacer le QLineEdit pointé, tu utilises la méthode QLineEdit::clear().

    En espérant t'avoir aidé.
  • Bonjour myrddin772,
    Conncernant le mode "effacer" je pensais plutot à la fonction effacer juste la derniere lettre tapée ( exemple : Je tape : ABCDEFH, je me suis trompé, j'efface juste la dernière lettre, le H et je me G, ... Problème c'est que la fonction Clear() va tout effacer le QLineEdit. En imaginant que l'on tape du texte dans une QTextEdit, à chaque erreur il faudrai tout recommencer !!!

    Pour le principe du FOCUS, je comprend ou tu veux en venir mais ne vois pas comment l'utiliser, surtout avec des POINTEURS ces satanés POINTEURS que je déteste par dessus tout car j'ai du mal a m'en servir ...
  • Pour la fonction effacer, tu modifies le texte du QLineEdit en en enlevant le dernier caractère :
    QString texte = LineEdit->text();
    int longueur = texte.length();
    LineEdit->setText(texte.left(longueur - 1);
  • ok donc pour moi ça donnerai ca si je ne me trompe pas :

    void MainWindow::on_pushButton_45_clicked()
    {
    QString mot (ui->lineEdit->text());
    int longueur = mot.length();
    ui->lineEdit->setText( mot.left ( longueur - 1 ));
    }
  • Tout à fait !

    Pour la méthode des pointeurs, je ne suis plus sûr de la méthode exacte, je regarde ça demain et te tiens au courant ;)
  • merci beaucoup myrddin772,
    J'attends ton aide avec impatience
  • Alors me revoilà !

    Tu dois créer une nouvelle classe (LineEdit par exemple) héritant de QLineEdit.
    Cette classe doit redéfinir la méthode virtuelle protégée focusInEvent et posséder un signal focusGet (nom donné pour exemple ;) ). Dans le méthode focusInEvent, tu émets le signal focusGet.

    Ensuite dans la classe MainWindow, tu crées un pointeur (nommé currentLineEdit par exemple)sur ta classe créée plus tôt. Tu initialise ce pointeur à 0 dans le constructeur.
    Ensuite, tu crées des connexions automatique aux signaux focusGet de chacune de tes LineEdit. Dans ces méthodes, tu donnes à ton pointeur currentLineEdit l'adresse de la LineEdit concernée...

    Et donc, quand tu veux ajouter ou retirer un caractère à la LineEdit courante (celle où se trouve le curseur donc), tu utilises le pointeur currentLineEdit...

    J'espère avoir été clair ;)
  • Bonjour,
    Pourquoi ne pas utiliser le signal :
    void    QApplication::focusChanged ( QWidget * old, QWidget * now );
    Avec un pointeur sur lineEdit public, dans un slot connecté à ce signal on peut faire :

    currentLineEdit = dynamic_cast<QLineEdit*>(now);
    Ailleurs dans ton code :

    if (currentLineEdit) //TRES IMPORTANT
    currentLineEdit->setText("blablabla");
  • Je ne connaissais pas ce signal, tiens !

    Tu vois, tu as deux méthodes possibles ;)
  • Bonjour,
    Dsl de ne pas avoir répondu plus tot

    babaOroms, je ne comprend pas très bien comment utiliser le " focusChanged "
    Peux tu m'aider ?
    En attendant, je cherche
Connectez-vous ou Inscrivez-vous pour répondre.