Выбор строки в QTreeView программно - PullRequest
16 голосов
/ 11 февраля 2011

У меня есть QTreeView с QFileSystemModel в качестве модели.

В QTreeView для SelectionBehavior установлено значение SelectRows.

В моем коде я читаю набор данных для выбора и затем выбираю их с помощью:

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

Выбирает ячейку, а не строку.,

Добавили глупый обходной путь, но скорее исправили бы это правильным способом.

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

Или это ^^ единственный способ сделать это?

Ответы [ 2 ]

23 голосов
/ 09 апреля 2012

Если вы хотите выбрать полную строку, вы должны использовать следующее:

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

Обратите внимание, что иногда вы можете сначала отменить выбор:

selection->select(idx, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows);
11 голосов
/ 11 февраля 2011

Вы также можете выбрать всю строку, используя QItemSelection:

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

Также, если вы также хотите выбрать строку для пользовательских кликов, вам необходимо установить поведение выбора:

treeview->setSelectionBehavior (QAbstractItemView::SelectRows)
...