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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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.

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