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

Qcombobox en tant que completer

8 Mar modifié dans Qt / Langage C++
Bonjour;
Après avoir essayé sans succès d'obtenir le résultat escompté, je fais appel à vous, je tiens à préciser que je ne suis pas programmeur et que je souhaite utiliser un qcombobox.

je vous expose la problématique :
je veux utiliser un Qcombobox dynamique comme compléter .

contexte :
j'ai une liste de noms qui vient d'un serveur, je veux que cette liste apparaisse dans la combo-box, cette liste je la mets dans un QString nomClients puis dans une QStringlist jusque-là pas de problème, la combo-box fonctionne..
QStringList listeClients;
listeClients<<"fJE"<<"fER"<<"FSY"<<"fSY"<<"azerty";//liste temporaire
listeClients.clear();
listeClients=nomsClients.split("$",QString::SkipEmptyParts);
ui->combobox_3->addItems(listeClients);
ui->combobox_3->showPopup();
- Mais ici , à chaque fois que la liste s'affiche je ne peut plus écrire ,hors je voudrais pouvoir continuer à écrire malgré l'apparition de la liste , comme dans l'utilisation d'un qcompleter sur une LineEdit .

- Le nom des clients arrives à partir de 3 lettres , mais ici le premier nom de la liste remplace automatiquement ce que j'ai écris dans le combobox ,ce qui me dérange car le premier nom qui apparaît n'es pas forcement celui que j'ai commencé a écrire .Dans le langage de Qt je voudrais que l'index 0 celui qui est éditable reste inchangé malgré la nouvelle liste .

Réponses

  • Bonsoir ! pense à mettre le code entre balises, comme je l'ai fait dans ton message. C'est plus lisible.
  • ... D'ailleurs c'est tellement plus lisible qu'on voit tout de suite ce qui cloche.
    Dans ton vrai code, laquelle des lignes commençant par "listeClients" est la bonne ?
  • 8 Mar modifié
    Bonjour PapaJaac,
    Merci de t’intéresser à mon sujet ,je n'ai pas très bien compris ta question mais la ligne qui va apparaître et qui apparaît dans le qcombobox est la suivante:
    listeClients=nomsClients.split("$",QString::SkipEmptyParts);
    (tu viens de m'apprendre l'utilisation de balise sur le forum)

  • Salut,
    pourrais-tu nous faire un mini projet pour qu'on comprenne bien le soucis ?
    Je regarderai à tête reposée après ma partie de tennis de ce soir.
  • 8 Mar modifié
    Salut,babaOroms
    je n'ai malheureusement pas le temps de faire une mini projet, de plus je présenterais exactement le même code,car ce sont les seuls lignes qui concerne la combobox.
    je vais essayer de donner plus de détails :
    j'ai une combobox éditable après la saisie de 3 lettres j'envoie une requête au serveur qui me renvoi une liste de clients séparé par des
    "$ " 
    .

    exemple :
    johan$arnaud$mike

    Cette liste de clients je la met dans une variable
    QString
    Puis je fait une
    QStringList
    qui va stocker c'est clients sans les
    "$"
    j'ai donc :
    QStringList listeClients; 
    listeClients=nomsClients.split("$",QString::SkipEmptyParts);//"johan","arnaud","mike"
    J'ajoute cette liste au menu déroulant du qcombobox et j'affiche automatiquement ce menu :
       ui->combobox_3->addItems(listeClients);
    ui->combobox_3->showPopup();
    j'obtiens ceci :

    image

    Mais ici , à chaque fois que la liste s'affiche je ne peut plus écrire si je ne clique pas de nouveau dans la zone éditable ,hors je voudrais pouvoir continuer à écrire malgré l'apparition de la liste , comme dans l'utilisation d'un qcompleter sur une LineEdit .(j'ai cru comprendre qu'il fallait bidouiller dans se que l'on appel le focus )


    sur la capture vous pouvez voir que j'ai corrigé cette étape:
    Le nom des clients arrives à partir de 3 lettres , mais ici le premier nom de la liste remplace automatiquement ce que j'ai écris dans le combobox ,
    ce qui me dérange car le premier nom qui apparaît n'es pas forcement celui que j'ai commencé a écrire .
    Dans le langage de Qt je voudrais que l'index 0 celui qui est éditable reste inchangé malgré la nouvelle liste .

    J'ai juste ajouté un élément vide dans le combobox a la position 0 avec Qt disigner
    PNG
    PNG
    1.PNG
    8K
  • Sinon voici le code actuel recupererNomsClients(QString _nom) récupère les clients séparé par des "$"
    void F_RecapAffaire::recupererNomsClients(QString _nom)
    {

    nomsClients = _nom;
    qDebug() << "RechercheClients::recupererNomsClients (le nom du client est ): " + nomsClients;
    // sectionner en fonction du message recu ($)

    this->ListeContacte();


    }
    Liste contacte s'occupe d'afficher la liste dans la combo
    void F_RecapAffaire::ListeContacte()

    { // Avec une LineEdit cela fonctionne ,la liste s'affiche sans m’empêcher de continuer a remplir la Line Edit

    // listecontacte<<"fJE"<<"fER"<<"FSY"<<"fSY"<<"azerty";//liste temporaire
    // listecontacte.clear();
    //listecontacte= nomsClients.split("$",QString::SkipEmptyParts);
    //QStringListModel *model = (QStringListModel*)(cmpt->model());
    // cmpt=new QCompleter(listecontacte,this);
    //cmpt->setCaseSensitivity(Qt::CaseInsensitive);
    //ui->lineEdit_3->setCompleter(cmpt);
    //cmpt->complete();



    //avec le combobox erreur la liste apparaît et je ne peut plus écrire
    // tant que je ne clique pas de nouveau dans la zone éditable

    QStringList listeClients;
    listeClients<<"fJE"<<"fER"<<"FSY"<<"fSY"<<"azerty";//liste temporaire
    listeClients.clear();
    listeClients=nomsClients.split("$",QString::SkipEmptyParts);
    ui->combobox_3->addItems(listeClients);
    ui->combobox_3->showPopup();

    }
Connectez-vous ou Inscrivez-vous pour répondre.