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 ?
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 ?
Regarde les fonctions de sa classe parente : QAbstractItemView
Tu devrais trouver ton bonheur avec les signaux, ou certaines fonctions particulières.
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.
Ceci ne répond pas au problème ?
De la doc : http://doc.qtsoftware.com/4.5/qabstr...selectionModelQItemSelectionModel * QAbstractItemView::selectionModel () const
Returns the current selection model.
EDIT :
currentIndex peut aussi le faire
QModelIndex currentIndex () const
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 ?
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?
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... ^^
Ç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();
T'as tenté avec d'autres colonnes?
Es tu sûr que la première n'est pas un int? (l'index, par exemple)
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.
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.
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 ?
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.
J'ai fait ceci :
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.
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;
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().
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part selection[0]
Il y a les méthodes isEmpty() et first() de QList qui sont très bien pour ^^
Partager