Selecionar uma linha na QTreeView programaticamente
Pergunta
Eu tenho um QTreeView com QFileSystemModel como modelo.
O QTreeView tem SelectionBehavior definido para SelectRows.
No meu código eu leia um conjunto de dados para selecionar e, em seguida, selecioná-los através de:
idx = treeview->model()->index(search);
selection->select(idx, QItemSelectionModel::Select);
Isso seleciona uma célula, não a linha ..
Adicionou um estúpido solução, mas seria bastante corrigir este o caminho correto.
for (int col=0; col< treeview->model()->columnCount(); col++)
{
idx = treeview->model()->index(search, col);
selection->select(idx, QItemSelectionModel::Select);
}
Ou que é ^^ a única maneira de fazê-lo?
Solução
Você também pode selecionar uma linha inteira usando um QItemSelection:
selection->select (
QItemSelection (
treeview->model ()->index (search, 0),
treeview->model ()->index (search, treeview->model ()->columnCount () - 1)),
QItemSelectionModel::Select);
Além disso, se você também quer que a seleção de linha para o usuário cliques que você precisa para definir o comportamento de seleção:
treeview->setSelectionBehavior (QAbstractItemView::SelectRows)
Outras dicas
Se você deseja selecionar uma linha inteira, você deve usar o seguinte:
selection->select(idx, QItemSelectionModel::Select | QItemSelectionModel::Rows);
Observe que você pode, por vezes, primeiro quero para desmarcar a seleção:
selection->select(idx, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows);