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 :

Problème avec QLCDNumber

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 7
    Par défaut Problème avec QLCDNumber
    Bonjour tout le monde ! Alors voilà je m'adresse à vous car j'ai un problème sur QT, je souhaite faire en sorte qu'un utilisateur puisse taper "à la main" un chiffre qui s'inscrit ensuite dans le LCD Number.

    Seulement voila, j'ai regarder les propriétés, certains forum mais rien ne fonctionne !

    Voici un aperçu de la fenêtre :

    Nom : Capture.PNG
Affichages : 753
Taille : 10,9 Ko


    Merci !

  2. #2
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 736
    Par défaut
    Bonjour, bienvenue sur le forum

    QLCDNumber est un widget qui affiche ce qu'on lui envoie, on ne le modifie pas comme un QLineEdit par exemple.

    Il faut donc utiliser un widget ou une fonction qui lui fournira la valeur via ses méthodes display(int) ou display(double).

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 7
    Par défaut
    Merci de m'avoir répondu si rapidement !

    Du style une TextBox ? Mais ça serait possible ensuite de modifier la police pour avoir quelque chose qui ressemble au QLCD ?

    Désolé pour ces questions aussi nulles ^^

  4. #4
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 736
    Par défaut
    Si vraiment tu veux un widget qui ressemble à un LCD (ou plutôt on devrait pas parler de 7 segments ?), mais éditable, oui changer la police est la solution.

    Des polices de ce type il en existe pas mal (par exemple ici).

    Puisque QLineEdit est un QWidget, il suffit de savoir comment on modifie une police dans un QWidget (voir http://doc.qt.io/qt-5/qwidget.html#styleSheet-prop et http://doc.qt.io/qt-5/stylesheet.html).
    Il faut juste faire attention aux tailles et au look de l'appli, que ça ne fasse pas « moche ».

  5. #5
    Membre habitué
    Homme Profil pro
    Passioné
    Inscrit en
    Mars 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Passioné

    Informations forums :
    Inscription : Mars 2018
    Messages : 10
    Par défaut
    Salut !
    Il te faut passer par le système des Signaux & slots
    Exemple pour un affichage à 4 chiffres :

    Dans le constructeur de ma classe :

    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
    EmWindow::EmWindow(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::EmWindow)
    {
        ui->setupUi(this);
    //   .../...
     
    //Affichage dans pinLcdNumber en appuyant sur les touches
            QShortcut *shrtcut1 = new QShortcut(tr("1"), this);
            QShortcut *shrtcut2 = new QShortcut(tr("2"), this);
            QShortcut *shrtcut3 = new QShortcut(tr("3"), this);
            QShortcut *shrtcut4 = new QShortcut(tr("4"), this);
            QShortcut *shrtcut5 = new QShortcut(tr("5"), this);
            QShortcut *shrtcut6 = new QShortcut(tr("6"), this);
            QShortcut *shrtcut7 = new QShortcut(tr("7"), this);
            QShortcut *shrtcut8 = new QShortcut(tr("8"), this);
            QShortcut *shrtcut9 = new QShortcut(tr("9"), this);
            QShortcut *shrtcut0 = new QShortcut(tr("0"), this);
            connect(shrtcut1, SIGNAL(activated()), this, SLOT(afficher1()));
            connect(shrtcut2, SIGNAL(activated()), this, SLOT(afficher2()));
            connect(shrtcut3, SIGNAL(activated()), this, SLOT(afficher3()));
            connect(shrtcut4, SIGNAL(activated()), this, SLOT(afficher4()));
            connect(shrtcut5, SIGNAL(activated()), this, SLOT(afficher5()));
            connect(shrtcut6, SIGNAL(activated()), this, SLOT(afficher6()));
            connect(shrtcut7, SIGNAL(activated()), this, SLOT(afficher7()));
            connect(shrtcut8, SIGNAL(activated()), this, SLOT(afficher8()));
            connect(shrtcut9, SIGNAL(activated()), this, SLOT(afficher9()));
            connect(shrtcut0, SIGNAL(activated()), this, SLOT(afficher0()));
        }
    //  .../...
    }
    Création d'autant de slots personnalisés qui appellent une fonction afficherPin() (dans mon appli il s'agit d'un code style code PIN):

    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
     
    void EmWindow::afficher1()
    {
        afficherPin(1);
    }
    void EmWindow::afficher2()
    {
        afficherPin(2);
    }
    void EmWindow::afficher3()
    {
        afficherPin(3);
    }
    void EmWindow::afficher4()
    {
        afficherPin(4);
    }
    void EmWindow::afficher5()
    {
        afficherPin(5);
    }
    void EmWindow::afficher6()
    {
        afficherPin(6);
    }
    void EmWindow::afficher7()
    {
        afficherPin(7);
    }
    void EmWindow::afficher8()
    {
        afficherPin(8);
    }
    void EmWindow::afficher9()
    {
        afficherPin(9);
    }
    void EmWindow::afficher0()
    {
        afficherPin(0);
    }
    Et enfin, la fonction afficherPin() :

    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
    void EmWindow::afficherPin(const int &number)
    {
        int tmp;
     
        if(ui->pinLcdNumber->intValue() == 0)
        {
            ui->pinLcdNumber->display(number);
            return;
        }
        else
        {
            tmp = ui->pinLcdNumber->intValue();
            tmp *= 10;
            tmp += number;
            ui->pinLcdNumber->display(tmp);
        }
    }

    Dans le fichier emwindow.h correspondant :
    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
     
    // .../...
    private slots:
     
        void afficher1();
        void afficher2();
        void afficher3();
        void afficher4();
        void afficher5();
        void afficher6();
        void afficher7();
        void afficher8();
        void afficher9();
        void afficher0();
     
    private:
     
        void afficherPin(const int &number);
    //   .../...
    Voilà, il y a peut-être moyen de faire plus simple, mais chez moi ça fonctionne

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 7
    Par défaut
    Citation Envoyé par Daïmanu Voir le message
    Si vraiment tu veux un widget qui ressemble à un LCD (ou plutôt on devrait pas parler de 7 segments ?), mais éditable, oui changer la police est la solution.

    Des polices de ce type il en existe pas mal (par exemple ici).

    Puisque QLineEdit est un QWidget, il suffit de savoir comment on modifie une police dans un QWidget (voir http://doc.qt.io/qt-5/qwidget.html#styleSheet-prop et http://doc.qt.io/qt-5/stylesheet.html).
    Il faut juste faire attention aux tailles et au look de l'appli, que ça ne fasse pas « moche ».
    D'accord, c'est déjà plus claire pour moi, merci !

    Mais une fois la police téléchargée, il faut que je la mette dans le même dossier que le programme pour pouvoir l'utiliser ? Ou est-ce-qu'il y a un répertoire spécifique dans le répertoire d'installation ? (Je suis sur une VM sous Debian)

  7. #7
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 736
    Par défaut
    Le plus propre est d'utiliser le système de ressources de Qt, qui permet de distribuer des ressources personnalisées (comme les polices d'écriture) au sein de l'application.
    L'avantage est qu'il n'y a pas à se préoccuper de l'emplacement de la ressource, elle est dans l’exécutable.

    En gros tu télécharges la police, tu las mets dans un dossier et dis à Qt que ce dossier contient des ressources. Puis dans le code tu fais quelque chose comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    QFont font(":/fonts/mylcdfont.ttf");
    widget->setFont(font);
    Note bien le :/ qui indique qu'il faut chercher dans les ressources et pas dans un dossier classique.

    Des liens qui peuvent t'aider :
    https://www.developpez.net/forums/d9...personnalisee/
    https://qt.developpez.com/doc/4.6/sy...ressources-qt/

    @zobrak Ton code fonctionne, mais tu peux le simplifier avec QSignalMapper plutôt que de définir 10 fonctions qui font quasiment la même chose.

  8. #8
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Je n'ai pas lu tous les codes proposés, mais, avant même de proposer une réponse, je souhaiterais que l'on définisse clairement les besoins que tu essayes de remplir au travers de cette interface...

    Si j'interprète correctement l'image que tu nous présente, tu veux nous afficher un numéro d'identification (de branche ) à quatre chiffres ou plus (du genre version.sous-version.patch.tweak ), mais, si j'en crois le texte, tu voudrais pouvoir générer (automatiquement ) ce numéro de version.

    Pour moi, problème, si ce n'est que, si j'ai bien interprété l'image (ce qui reste à confirmer ), il y a très certainement quelques questions à se poser sur le fonctionnement de cette interface...

    La première, si l'on part du principe que cette interface permet la génération automatique d'un identifiant, c'est -- très certainement -- où cet identifiant sera généré:
    • Est-ce "une bonne fois pour toutes" au moment où l'interface est affiché
    • Est-ce que la génération de l'identifiant doit se faire "à la demande expresse de l'utilisateur" (par exemple: quand il appuie sur un bouton) ou
    • Est-ce une "combinaison des deux" un premier identifiant est généré automatiquement, mais l'utilisateur peut "forcer" la génération d'un nouvel identifiant en cliquant sur un bouton

    La deuxième question peut paraître surprenante, mais: souhaites tu générer un numéro d'identification totalement aléatoire ou un numéro d'identification qui "respecte une certaine logique"

    Dans le premier cas, cela signifie que tu peux obtenir, suite à cinq appels à cette interface, dans l'ordre des valeurs comme 9785 1549 6541 3569 (par exemple), mais qu'il faudra sans doute s'assurer que les valeurs ainsi obtenues ne soient... pas encore utilisées.

    Dans le deuxième cas, nous serions -- par exemple -- face à une situation dans laquelle tu voudrais générer des informations de versions (majeure. mineure. patch. tweak) et, dans ce cas, l'utilisateur doit préciser, d'une manière ou d'une autre, quelle "sous information" il souhaite faire évoluer, car le passage d'une des "sous-information" à la valeur suivante (qui sera toujours égale à N+1) remet forcément toutes les informations qui suivent à 0:
    • le passage de la version majeure de 1 à 2 provoque la remise à 0 de mineure de patch et de tweak
    • le passage de la version mineure de 15 à 16 provoque la remise à 0 de patch et de tweak
    • le passage de la patch de 5 à 6 remet tweak à 0

    Bien sur, selon ton objectif, tu devras prévoir un fonctionnement adapté de ton interface

    La dernière question qu'il s'agirait de se poser est sans doute la plus importante de toutes: comment l'utilisateur et / ou l'application devront-ils réagir lorsque l'identifiant proposé conviendra à l'utilisateur

    En d'autre termes, que devrait-il se passer, selon toi, lorsque l'utilisateur aura cliqué sur ton bouton "VALIDER"

    Là, encore, il y a deux solutions possibles:
    • Soit, tu t'attends à ce que l'utilisateur ait pris note de l'identifiant qu'il a accepté;
    • Soit, tu espères pouvoir récupérer -- d'une manière ou d'une autre -- cet identifiant "automatiquement", pour que ton application puisse l'utiliser.


    Encore une fois, je n'ai aucun problème avec aucun de ces points de vue!!! Il faut juste savoir que l'utilisateur est -- par nature -- un imbécile distrait qui n'attend que l'occasion pour faire une connerie, et de préférence au pire moment qui soit.

    Si ton but est "simplement" de générer l'identifiant pour que l'utilisateur l'utilise "dans une autre application", la première solution est tout à fait acceptable, si ce n'est que ... tu dois t'attendre à ce que l'utilisateur fasse une connerie en recopiant l'identifiant qu'il aura lu (voire, même, à ce qu'il n'ait même pas la présence d'esprit d'essayer de s'en souvenir )

    Du coup, si l'identifiant généré est destiné à être utilisé par l'application qui affiche ton interface, la deuxième solution pourra sans doute t'éviter bien des soucis

    L'un dans l'autre, si tu veux une solution réellement adaptée à ton cas, il faudrait donc que tu répondes à ces trois questions avant tout, car il faut bien comprendre que la manière dont ton interface est représentée à l'écran n'aborde jamais que l'aspect "cosmétique" de ton application. Ce qui compte surtout (pour le développeur, s'entend) c'est la manière dont l'application (dans le sens le plus large possible) devra réagir à un choix validé par l'utilisateur
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 7
    Par défaut
    Salut, merci de l'intérêt que tu me portes !

    Oui en faite, cette interface a pour but de permettre à un utilisateur de rentrer un numéro d'identification pour un outil appelé banche. Une banche sert à faire du coffrage en béton. En faite, l'utilisateur rentre un numéro à quatres chiffres (Avec une certaine logique en effet (1001, 1002, 1003 ...) , et ces numéros sont stockées dans une base de données.

    Et je cherchais à faire en sorte que lorsqu'il rentre un numéro, la police ressemble aux chiffres 7 segments

    Citation Envoyé par Daïmanu Voir le message
    Le plus propre est d'utiliser le système de ressources de Qt, qui permet de distribuer des ressources personnalisées (comme les polices d'écriture) au sein de l'application.
    L'avantage est qu'il n'y a pas à se préoccuper de l'emplacement de la ressource, elle est dans l’exécutable.
    J'ai fais ce que tu m'as dit mais je n'ai aucun changement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QFont lcd(":/home/lucas/Bureau/font/LCDWinTT/LCD2B___.TTF");
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    saisie = new QLineEdit(this);
               saisie -> setText("1000");
               saisie -> setFont(lcd);

  10. #10
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Nous sommes donc bien d'accord que:
    1. C'est l'utilisateur de l'interface qui doit fournir le numéro de branche,
    2. l'application voudra récupérer ce numéro de branche pour l'utiliser "à sa guise" (même si, dans le cas présent, il s'agira "simplement" de le mettre dans une base de donnée)
    3. ton affichage LCD n'est en définitive là que pour le "look and feel"

    J''ai alors une nouvelle question à te poser: comment l'utilisateur va-t-il introduire ce numéro de branche
    Est-ce que le dernier numéro de branche introduit est affiché lorsque tu affiche ton interface (un bouton "+" permettant de passer au numéro suivant) ou est-ce que l'utilisateur doit introduire à chaque fois le numéro complet (ex : 1 puis 5 puis 9 puis 4, avec pour résultat l'affichage de 1594 dans ton LCD)

    Dans les deux cas, il manque sans doute quelque chose à ton interface:
    • soit, simplement, un bouton "+" dans le premier cas,
    • soit un "pavé numérique (10 boutons représentant chacun l'un des dix chiffre possibles, reliés éventuellement aux touches du clavier)

    Et il se peut d'ailleurs que tu penses à une troisième possibilité à laquelle je n'aurais pas pensé

    Toujours est-il que j'ai l'impression qu'il "manque quelque chose" à ton interface
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2018
    Messages : 7
    Par défaut
    Je l'ai un peu modifier, voici à quoi elle ressemble en ce moment :

    Nom : Capture.PNG
Affichages : 593
Taille : 12,0 Ko

    Nous sommes d'accord sur les 2 premiers points, cependant l'affichage LCD, je l'ai enlevé de ma tête, je préfère privilégier un QLineEdit, où je change la police afin de l'avoir en affichage 7 segments.
    Sinon, l'utilisateur rentrerait au clavier le numéro à 4 chiffres (sur le QLineEdit), et lorsqu'il clique sur Valider, il y aura deux possibilités. La première est que tout fonctionne donc le numéro se stocke dans une BDD et la seconde est le fait que le numéro existe déjà. Dans ce cas, un message alertera l'utilisateur et il devra modifier le numéro.

    Lorsque l'utilisateur cliquera sur Annuler, le texte affichée dans le QLineEdit sera supprimer, laissant ainsi ce dernier vide.
    Enfin, lorsqu'il cliquera sur Quitter, bah il quittera l'application ^^

  12. #12
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Alors, ce n'est pas "Annuler" le deuxième bouton... c'est "Reset"...

    Annuler, c'est quitter l'application sans rien changer ou le formulaire sans en tenir compte
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. Problème avec QLCDNumber
    Par Tracnac dans le forum Débuter
    Réponses: 3
    Dernier message: 31/10/2010, 11h50
  2. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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