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 :

Checker une valeur d'un QTreeWidgetItem


Sujet :

Qt

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 239
    Points : 92
    Points
    92
    Par défaut Checker une valeur d'un QTreeWidgetItem
    Bonjour,

    je cherche à savoir comment retourner, un int de préférence, indiquant l'item sélectionné par l'utilisateur dans un QTreeWidgetItem.
    C'est à dire, si dans mon QTreeWidgetItem j'ai 4 items, je veux que, si l'utilisateur surligne l'item 2, l'index de l'item en question me soit retourné.

    Aucune des méthodes proposées dans la classe de QTreeWidgetItem ne me semble faire ceci.
    J'ai alors essayer de passer par le QTreeWidget contenu dans le QTreeWidgetItem comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void ResultatRecherche::open()
    {
         qDebug() <<treeWidgetItem->indexOfChild(resultView->currentItem());
    }
    Mais pas plus de résultat, si QTreeWidgetItem ne me permet pas de faire ceci, existe t'il un autre conteneur du même genre (visuel) pour me permettre ceci ?
    J'ai vu qu'il y avait Q3ListBox entre autre...

    Merci beaucoup d'avance !

  2. #2
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Salut,

    Il n'y a pas de façon standard de faire (et encore moins de façon véritable dans l'absolue); la raison est simple: c'est un arbre! A moins de te limiter aux fils du noeud racine uniquement, auquel cas QTreeWidget::indexOfTopLevelItem correspond.

  3. #3
    Membre régulier
    Inscrit en
    Décembre 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 239
    Points : 92
    Points
    92
    Par défaut
    Salut,

    Merci de ta réponse.

    Apparement indexOfTopLevelItem() n'a pas l'air de faire ce que je recherche, donc tant pis, je vais essayer de trouver un autre moyen de procédé.

    Encore merci !

  4. #4
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Quel est le but final qui te pousse a utiliser une telle méthode?

  5. #5
    Membre régulier
    Inscrit en
    Décembre 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 239
    Points : 92
    Points
    92
    Par défaut
    En fait, l'arbre contient la recherche SQL de la base de données (je me suis fié une fois de plus à ton exemple "sample_db")
    L'arbre contient donc, pour donner un exemple précis, tous les proprietaires commençant par la lettre "P".

    Imaginons qu'il y ai trois résultat dans l'arbre, ce dernier renseignera seulement le codeP, le nom et le prénom des propriétaires.
    J'aimerais que, via la connexion d'un bouton "ouvrir", on puisse ouvrir la fiche du propriétaire sélectionné dans l'arbre.

    J'espère que c'est clair... Sinon je peux faire des screens de ce que j'ai déjà fait.

  6. #6
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Il ne faut dans ce cas pas passer par l'index de l'item, mais par l'identifiant de l'item. Tu peux par exemple le stocker par setData. Tu le mets en la dernière colonne, avec le UserRole, puis tu caches la dite colonne pour être sûr que ça ne gêne pas l'affichage. Ensuite, lorsqu'un item est sélectionné, tu récupères son identifiant et c'est parti.

  7. #7
    Membre régulier
    Inscrit en
    Décembre 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 239
    Points : 92
    Points
    92
    Par défaut
    J'ai créer une 4ième colonne qui est cachée donc, dans cette colonne j'ai un int enregistré dans l'arbre en fonction de la ligne (0 pour la premiere ligne, 1 pour la seconde...), par contre je n'ai pas utilisé setData(), car je passe par une QStringList pour remplir le QTreeWigdetItem... (je sais pas si ça aboutis au même ?)

    Jusque là je pense que j'ai bien compris ce que tu me proposais, mais j'ai toujours le même problème: comment récupéré la valeur d'une colonne (de ma colonne 4 dans mon cas) pour la ligne sélectionnée par l'utilisateur ?

    En sachant que l'utilisateur ne fait que cliquer sur cette ligne (ce qui s'apparente donc à un focus sur la ligne)

    Merci d'avance.

  8. #8
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Explique moi quelle serait les étapes dans un process logique?

  9. #9
    Membre régulier
    Inscrit en
    Décembre 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 239
    Points : 92
    Points
    92
    Par défaut
    L'utilisateur clic sur la ligne dans le QTreeWidgetItem qu'il souhaite.

    (prenons l'exemple de la 3ième ligne, donc l'utilisateur clic sur cette troisième ligne).

    L'utilisateur clic ensuite sur le bouton "ouvrir"
    le slot va chercher quelle ligne à le focus et retourne la valeur de la 4ième colonne de cette ligne (dans notre cas, la valeur de la 3ième ligne est 2).
    le slot retourne ensuite chercher la requete SQL qui à été préalablement utilisée en fonction de cette ligne.

    (Voila pour ce qui est du process que je veux avoir, étant donné que je ne sais pas si t'as question m'invite à trouver la réponse moi même ou si elle est juste la pour te renseigner un peu plus sur ce que je veux faire ).

    Attention, ma liste est dynamique, elle change tout le temps suivant ce que l'utilisateur recherche, et a enregistré au préalable.

    En espérant avoir répondu clairement.

  10. #10
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Plutôt pour essayer de te faire trouver la réponse
    Bon, je vais te donner un indice,facile, relis la doc de QTreeWidgetItem. Récupérer le texte de la 4ème colonne est d'une trivialité enfantine (l'indice est dans cette phrase )

  11. #11
    Membre régulier
    Inscrit en
    Décembre 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 239
    Points : 92
    Points
    92
    Par défaut
    Décidément

    J'en comprends par ton indice, qu'il n'y a rien de plus simple.
    Et aussi, qu'il faut retourné du text, et donc un QString.

    J'ai alors recherché toutes les méthodes retournant un QString (ou à la limite un QVariant, le terme "enfantine" vient peut etre de la d'ailleurs ?)
    Mais aucune ne me satisfait...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void ResultatRecherche::open()
    {
         qDebug() << treeWidgetItem->text(3); //me retourne uniquement la
    //valeur de la dernière ligne de la colonne 4, pas de la ligne sélectionnée par l'utilisateur.
         qDebug() << treeWidgetItem->data(3, 0).toString(); // Idem
    }

  12. #12
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    C'est la bonne méthode
    Par contre, dans ton snippet, rien n'indique c'est bien l'item sélectionné qui est utilisé. Est-ce le cas?

  13. #13
    Membre régulier
    Inscrit en
    Décembre 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 239
    Points : 92
    Points
    92
    Par défaut
    En effet, rien n'indique à text(int column) l'item dont il doit retourné (donc la ligne dont il doit retourner la valeur de la colonne 4), et c'est bien ça qui me gène depuis mon premier post

    Comment faire pour indiqué au programme qu'elle ligne du Tree à le focus ?

    Y'aurait bien la méthode isSelected() qui pourrait ressembler à ce que je veux, mais...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(treeWidgetItem->isSelected())
           qDebug() << treeWidgetItem->data(3, 0).toString();
    Comment lui préciser la ligne ? Car il ne le fait uniquement pour la dernière ligne.
    (dans le cas présent, je retourne "3" quand la 4ieme et dernière ligne de Tree est sélectionnée)

    EDIT: je viens de voir "checkState(int i)" , je vais essayer d'approfondir...

  14. #14
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Mais non :'(

    L'item sélectionné, tu le récupères avec selectedItems()!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    QList<QTreeWidgetItem*> selected = treeWidget->selectedItems();
    foreach(QTreeWidgetItem *item, selected)
    {
       // t'utilise l'item ici
    }

  15. #15
    Membre régulier
    Inscrit en
    Décembre 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 239
    Points : 92
    Points
    92
    Par défaut
    Wahou !

    Un grand merci, ça fonctionne du tonnerre !

    Je n'aurais jamais pensé à repasser par QTreeWidget::selectedItems() (ni par la classe de QTreeWidget tout court en fait) et de comparer les deux QTreeWidgetItem.

    Désolé de ne pas avoir compris plus tôt, et encore merci ^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. checker une valeur sur un site en java
    Par quentin10000 dans le forum Langage
    Réponses: 3
    Dernier message: 01/04/2014, 17h31
  2. Lire une valeur dans le registre
    Par John.s dans le forum C
    Réponses: 2
    Dernier message: 26/11/2003, 20h55
  3. Retourner une valeur avec une fonction
    Par stephtbest dans le forum ASP
    Réponses: 4
    Dernier message: 31/10/2003, 17h37
  4. Prendre une valeur dans la grappe XML
    Par Sandrine75 dans le forum XMLRAD
    Réponses: 7
    Dernier message: 21/05/2003, 11h26
  5. Afficher une valeur du context
    Par [DreaMs] dans le forum XMLRAD
    Réponses: 13
    Dernier message: 28/04/2003, 14h49

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