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

Qt Discussion :

Combo box : auto-complétant et éditable ?


Sujet :

Qt

  1. #1
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 677
    Points
    13 677
    Billets dans le blog
    1
    Par défaut Combo box : auto-complétant et éditable ?
    Bonjour

    Je fais un IHM pour gérer une BDD de disques de musique. Dans la base, il y a une table stockant la liste des artistes. Dans le formulaire pour ajouter un disque à la base, je souhaite que l'utilisateur dispose d'une combo box avec la liste des artistes présents dans cette table, mais je veux aussi qu'il puisse y entrer une nouvelle valeur. Enfin, le tout doit être auto-complétant.


    J'ai réussi à créer une telle combo box. Le problème est pour la récupération de la valeur choisie / entrée cette combo box.

    Voici le code (adapté pour Dvpez) que j'ai utilisé pour créer la combo box :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        // Combo box pour l'affichage de la liste
        champTest = new QComboBox;
        // Edition autorise
        champTest->setEditable(true);
        // Un champ vide pour entrer son texte
        champTest->insertItem(0,"");
        // Ajout d'autres artistes :
        champTest->insertItem(1,"Metallica");
        champTest->insertItem(2,"Guns");
    Dans mon IHM, il y a un bouton "ajouter" et dans le slot associé au clic sur ce bouton, je souhaite récupérer la valeur de la combo box. Je souhaite récupérer le nom de l'artiste mais aussi L'INDEX DE CET ÉLÉMENT. Et là, je galère depuis hier. J'ai regardé les différentes valeurs possibles, mais rien ne va...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        qDebug() << "Index courant :" << champTest->currentIndex();
        qDebug() << "Texte correspondant :" << champTest->itemText( champTest->currentIndex() );
        qDebug() << "Texte du 'line edit' :" << champTest->lineEdit()->text();


    Le problème est assez compliqué, il y a plusieurs cas :

    1. Si dans mon champ vide, je tape par exemple "AC/DC", je clique sur mon bouton et je regarde mon debug :
      - J'ai bien un index courant à 0.
      - Les deux textes à "AC/DC".
      Dans ce cas, pas de problème dans ce cas.

    1. Si dans mon champ vide, je tape "Gu", ça auto-complète à Guns, je clique sur mon bouton et je regarde mon debug :
      - L'index est à 2.
      - Les deux textes sont à "Guns".
      Dans ce cas, tout va bien aussi.

    1. Et là, ça se gâte... Je tape "Gu" et j'ai le résultat décrit au point 2. Je continue à écrire dans mon champ et à la suite de "Guns', je rajoute "N Roses", et je clique.
      - L'index est à 2.
      - Le texte correspond est à "Guns".
      - Le texte édité est à "Guns N Roses".




    Problème : je voudrais que l'index soit à 0 !!!!


    J'ai essayé de faire un "champTest->setCurrentIndex(0);" mais le champ redevient vide...

    Je suis preneur de toute idée pour arranger la chose !! Merci !!!!

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Points : 969
    Points
    969
    Par défaut
    Salut,

    Pourrais t on avoir le code de ton "autocompletion" ?

    Car d'après moi, dès que tu tapes ton "Guns", ton système doit détecter que le nom existe et placer la combobox sur l'index correspondant (i.e. le 2).

    Pour moi, li doit y avoir un problème ailleurs dans ton code qui te met à l'index 2 automatiquement.

    Edit : et pouquoi tu cherches à récupérer l'index ? Pour moi le slot devrait faire un truc comme :
    1. lecture valeur du lineEdit
    2. si valeur existe déjà, mettre l'index à la valeur existante
    sinon, l'insérer dans la combobox à un index x, et mettre la combobox à cet index.



    G.
    Un problème avec Qt ? Vous trouverez votre réponse ici : http://doc.trolltech.com/4.6/overviews.html
    En français (traduction réalisée par l'équipe Qt de DVP) : http://qt.developpez.com/doc/4.6/vues-d-ensemble/

  3. #3
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 677
    Points
    13 677
    Billets dans le blog
    1
    Par défaut
    Il n'y a pas de code d'autocomplétion, c'est automatique à la création du QComboBox. Voir : http://qt.developpez.com/doc/4.6/qco.../#setcompleter

    Car d'après moi, dès que tu tapes ton "Guns", ton système doit détecter que le nom existe et placer la combobox sur l'index correspondant (i.e. le 2).
    C'est bien ce qu'il se passe, tel que je l'ai expliqué dans mon code. Et c'est un comportement normal. Mais si à la suite de Guns (après avoir validé avec le bouton), tu rajoutes quelque chose à la suite de Guns, l'index reste à 2. Or, pour moi, il serait logique qu'il détecte que le texte a changé.

    Pourquoi je veux récupérer l'index ? Parce que l'index dans le combo box est le même que dans ma table SQL. J'évite une requête ^^ Je vais me résoudre à ça, car je ne trouve pas de solution à ce problème...

Discussions similaires

  1. Réponses: 3
    Dernier message: 13/02/2014, 16h25
  2. [XL-2007] Auto-completion - Fonctionnement de la combo-box
    Par ESVBA dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 28/10/2009, 23h16
  3. [ZF 1.8] [ZF 1.8.2] Combo box et redirection auto
    Par brainstorm dans le forum Zend_Form
    Réponses: 4
    Dernier message: 24/07/2009, 14h18
  4. Réponses: 2
    Dernier message: 11/05/2004, 11h17
  5. Combo box et liste de valeurs contenues dans ma table
    Par TieumB dans le forum C++Builder
    Réponses: 14
    Dernier message: 05/04/2004, 18h47

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