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 :

QTreeView : récupérer les données


Sujet :

Qt

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 198
    Par défaut QTreeView : récupérer les données
    Bonjour,

    Maintenant que mon QTreeView affiche ce que j'attends j'ai les soucis suivants :

    1) Comment déterminer la ligne qui est sélectionnée ?

    2) Comment récupérer les données de la ligne sélectionnée ?

  2. #2
    Membre expérimenté
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Par défaut
    Regarde les fonctions de sa classe parente : QAbstractItemView

    Tu devrais trouver ton bonheur avec les signaux, ou certaines fonctions particulières.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 198
    Par défaut
    Quand je clique sur un bouton pour exécuter l'action associée j'ai besoin de savoir quelle est la ligne sélectionnée dans ma vue. Je ne vois pas de fonction dans QAbstractItemView qui me donne la ligne en focus.

  4. #4
    Membre expérimenté
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Par défaut
    Ceci ne répond pas au problème ?

    QItemSelectionModel * QAbstractItemView::selectionModel () const

    Returns the current selection model.
    De la doc : http://doc.qtsoftware.com/4.5/qabstr...selectionModel

    EDIT :
    currentIndex peut aussi le faire
    QModelIndex currentIndex () const

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 198
    Par défaut
    La fonction me retourne un objet QItemSelectionModel.
    Je lui applique la méthode currentIndex() qui me renvoie un QModelIndex.
    Avec data je récupère un QVariant. Comment extraire les trois colonnes QString ?

  6. #6
    Membre expérimenté
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Par défaut
    Si tu t'attends à un QString, utilises QVariant::toString() qui te renvoie ta data convertie en QString ou une QString vide si la conversion à échoué.

    Qu'entends tu par 3 colonnes?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 198
    Par défaut
    Ma ligne QTreeView contient trois colonnes.

  8. #8
    Membre expérimenté
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Par défaut
    Pour chaque colonne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ModelIndex* res = modelIndex->sibling ( modelIndex->row, j );

    Je n'ai jamais utilisé cette classe, si un expert à un avis plus simple... ^^

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 198
    Par défaut
    Ça compile, ça s'exécute, mais ma string est vide :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    QModelIndex modelIndex = listeProjets->currentIndex();
    QModelIndex res = modelIndex.sibling ( modelIndex.row(), 0 );
    QString projet = res.data().toString();

  10. #10
    Membre expérimenté
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Par défaut
    T'as tenté avec d'autres colonnes?

    Es tu sûr que la première n'est pas un int? (l'index, par exemple)

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 198
    Par défaut
    J'ai essayer avec d'autre colonnes, sans succès.

    Je trouve difficile l'utilisation des listes et tableau avec Qt : la doc n'est pas clair , ni suffisante, et omet beaucoup de points indispensables à l'usage.

  12. #12
    Membre émérite

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par défaut
    Si tu n'utilises pas les modèles ou que tu n'aimes pas ça, pourquoi n'utilises tu pas un QTreeWidget. C'est autrement plus simple si tu n'as que des besoins "courants".

    Avec QTreeWidget tu utilises la fonction selectedItems() qui te renvoit la liste des items séléctionner. Après tu peux facilement récupérer leur valeur avec la méthode data().

    G.

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 198
    Par défaut
    Mon besoin est d'afficher un liste de trois colonnes que l'on peut trier. Puis sélectionner une ligne et en récupérer une partie du contenu (la première colonne de la ligne).
    Comment avec la fonction selectedItems() peut-on récupérer une colonne en particulier ?

  14. #14
    Membre émérite

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par défaut
    selectedItems() te renvoit la liste des QTreeWidgetItems séléctionnés.
    Un QTreeWidgetItem représente "une ligne" dans ton arbre.
    Cet item a une valeur associé à chaque colonne.
    La fonction data(int column, int role) te permet d'accéder à la valeur associé à chaque colonne sous forme de QVariant.

    G.

    PS : concernant le "role", tu as les definitiions ici. Les méthodes setData(...) et data(...) étant assez abstraites et permettant de manipuler différents types de données, le role permet d'associer "la donnée transmise" à "sa fonction". Dans ton cas, si tu veux récupérer la valeur afficher, le role est "Display Role", soit 0.

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 198
    Par défaut
    J'ai fait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    QList<QTreeWidgetItem *> selection = listeProjets->selectedItems();
    QString sel_projet = selection[0]->data(0, 0).toString();
    QStringList arg;
    QString user = "/U=******";
    QString mdp = "/P=" + motDePasse->text();
     arg << arg_client << user << mdp << sel_projet;
    Je récupère la bonne information dans sel_projet mais je ne sais pas pourquoi j'ai un caractère bizarre (barre ou carré) qui s'accroche derrière.

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 198
    Par défaut
    En fait le caractère final est un retour chariot. Je ne sais toujours pas comment il apparaît mais je l'écarte par un trimmed().

  17. #17
    Membre émérite

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par défaut
    Ca doit être un problème d'encodage (ascii/utf) pour le carré. Regarde dans QString, il me semble qu'il y a des méthodes pour traiter ce genre de problèmes.

    G.

    PS : dans ton code, fais attention :peut te renvoyer une erreur si rien n'a été séléctionné. Fais un test sur la taille de ta liste avant.

  18. #18
    Membre expérimenté
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Par défaut
    Il y a les méthodes isEmpty() et first() de QList qui sont très bien pour ^^

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 13/01/2006, 12h33
  2. XMLHttpRequest : Impossible de récupérer les données
    Par laurent_ifips dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 22/11/2005, 13h28
  3. [](VB) Récupérer les données dans un fichier .xml
    Par Furius dans le forum VBScript
    Réponses: 4
    Dernier message: 02/10/2005, 20h39
  4. Récupérer les données interbase dans une TStringGrid
    Par Ousse dans le forum Bases de données
    Réponses: 1
    Dernier message: 24/03/2005, 12h51
  5. Récupérer les données d'une iframe
    Par juli1 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 09/02/2005, 22h53

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