22 votes

Sélection programmatique d'une ligne dans QTreeView

J'ai un QTreeView avec QFileSystemModel comme modèle.

Le comportement de sélection du QTreeView est défini sur SelectRows.

Dans mon code, je lis un ensemble de données à sélectionner, puis je les sélectionne via :

idx = treeview->model()->index(search); 
selection->select(idx, QItemSelectionModel::Select);

Cela permet de sélectionner une cellule, et non la ligne

J'ai ajouté une solution de contournement stupide, mais je préférerais régler le problème de la bonne manière.

for (int col=0; col< treeview->model()->columnCount(); col++) 
{ 
   idx = treeview->model()->index(search, col); 
   selection->select(idx, QItemSelectionModel::Select); 
} 

Ou est-ce que c'est ^^ la seule façon de le faire ?

30voto

alex Points 271

Si vous souhaitez sélectionner une ligne complète, vous devez utiliser la méthode suivante :

selection->select(idx, QItemSelectionModel::Select | QItemSelectionModel::Rows);

Notez qu'il peut arriver que vous souhaitiez d'abord effacer la sélection :

selection->select(idx, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows);

12voto

Elmar de Koning Points 519

Vous pouvez également sélectionner une ligne entière à l'aide d'une QItemSelection :

selection->select (
    QItemSelection (
        treeview->model ()->index (search, 0),
        treeview->model ()->index (search, treeview->model ()->columnCount () - 1)),
    QItemSelectionModel::Select);

Si vous souhaitez également sélectionner des lignes en fonction des clics de l'utilisateur, vous devez définir le comportement de sélection :

treeview->setSelectionBehavior (QAbstractItemView::SelectRows)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X