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 :

[QLineEdit] Définir un validateur

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 33
    Points : 18
    Points
    18
    Par défaut [QLineEdit] Définir un validateur
    Salut !

    Je veux avoir une QLineEdit qui comporte un validator.
    Elle doit contenir 10 lettres minuscules + 1 chiffre, et il faut que les lettres soient dans l'ordre alphabétique.

    Il faut pour cela que je redéfinisse la méthode validate, mais je ne perçois pas bien son fonctionnement.

    Pour l'instant, j'ai ce code, mais ça ne compile pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class MonValideur : public QRegExpValidator {
     
    public:
        MonValideur(const QRegExp & rx, QObject * parent = 0);
        State validate(QString & string, int & a);
     
    };
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    QRegExpValidator *mv = new MonValideur(QRegExp("[a-z]{10}[0-9]"), this);
    lineEdit->setValidator(mv);
    J'ai cette erreur :
    error: undefined reference to `MonValideur::MonValideur(QRegExp const&, QObject*)'


    De l'aide ?

  2. #2
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    696
    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 : 696
    Points : 2 438
    Points
    2 438
    Par défaut
    Bonjour.

    Tu as déclaré une classe MonValidateur, sans définir ses méthodes.

    En fait tu n'as pas besoin de créer une classe pour ça, tu peux directement utiliser la classe QRegExpValidator.
    Il suffit de mettre lineEdit->setValidator(new QRegExpValidator(QRegExp("[a-z]{10}[0-9]"), this));
    Je fais appel aux esprits de Ritchie, Kernighan, Stroustrup et Alexandrescu
    Donnez moi la force, donnez moi le courage de coder proprement !

    « Ça marche pas » n'est PAS une réponse convenable, merci de détailler le souci en fournissant l’environnement, le code source, les commandes et les messages d'erreur.

    Ce club possède également un clavardage, on y trouve quelques perles entre deux sessions d'entraides.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    Mais il faut aussi que les lettres soient dans l'ordre alphabétique.
    Donc "abcdefghij5" doit être valide, mais "azertyuiop5" doit être invalide, la lettre 'e' doit être refusée car elle se trouve avant 'z'.

  4. #4
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    696
    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 : 696
    Points : 2 438
    Points
    2 438
    Par défaut
    D'accord.

    Dans ce cas tu peux conserver un RegExp si il en existe un (je ne suis pas expert, donc si quelqu'un connaît une expression).

    Sinon, tu devrais créer ta classe comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class MonValideur : public QValidator {
     
    public:
        MonValideur(QObject * parent = 0);
        State validate(QString & string, int & a);
     
    };
    Comme tu le vois, il n'y a plus besoin de RegExp, puisque tu vas directement écrire le code de validation.

    L'idée est alors, dans la méthode validate(), de renvoyer QValidator::Invalid quand la chaîne ne correspond pas (commence par un chiffre, n'a pas les lettres dans l'ordre), QValidator::Intermediate quand la chaîne n'est pas encore valide, mais qu'elle est sur le bon chemin (pas encore le chiffre de fin), ou QValidator::Acceptable si elle est correcte.
    Je fais appel aux esprits de Ritchie, Kernighan, Stroustrup et Alexandrescu
    Donnez moi la force, donnez moi le courage de coder proprement !

    « Ça marche pas » n'est PAS une réponse convenable, merci de détailler le souci en fournissant l’environnement, le code source, les commandes et les messages d'erreur.

    Ce club possède également un clavardage, on y trouve quelques perles entre deux sessions d'entraides.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    Il me semble plus optimisé d'hériter de QRegExpValidator, cela permet d'appeler le validate de la classe mère, pour détecter les erreurs simples (détectables avec un RegExp).
    Par contre il faut tester manuellement l'ordre alphabétique.

    Est-ce que la méthode validate de mon validateur sera appelée automatiquement à chaque modification du texte, ou alors il faudra que je l'appelle moi-même ?

  6. #6
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    696
    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 : 696
    Points : 2 438
    Points
    2 438
    Par défaut
    Oui, à partir du moment il est associé à son lineEdit, ce dernier va appeler validate automatiquement.
    Je fais appel aux esprits de Ritchie, Kernighan, Stroustrup et Alexandrescu
    Donnez moi la force, donnez moi le courage de coder proprement !

    « Ça marche pas » n'est PAS une réponse convenable, merci de détailler le souci en fournissant l’environnement, le code source, les commandes et les messages d'erreur.

    Ce club possède également un clavardage, on y trouve quelques perles entre deux sessions d'entraides.

Discussions similaires

  1. Réponses: 9
    Dernier message: 20/09/2005, 17h18
  2. [prg jeux ]Définir l'intersection de deux rectangles
    Par mat.M dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 30/07/2003, 18h11
  3. Définir une appli JEE avec JB7 Entreprise
    Par polo54 dans le forum JBuilder
    Réponses: 4
    Dernier message: 10/06/2003, 11h48
  4. [RAVE] Définir un imprimante...
    Par FW-S dans le forum Rave
    Réponses: 2
    Dernier message: 13/03/2003, 15h15
  5. Comment définir le type matrice ?
    Par charly dans le forum Langage
    Réponses: 7
    Dernier message: 15/06/2002, 21h01

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