QTableView How to select multiple columns programmatically
-
21-12-2019 - |
Question
I'm trying to select two columns of QTableView in code. Unfortunatelly, when I call
tableView->selectColumn(1)
tableView->selectColumn(2)
it selects 1st column, deselects 1st column and selects 2nd column. Is it possible to select multiple columns in code?
La solution
If you just need to ensure to allow the user to select multiple columns, you need to set up the proper selection mode as follows:
tableView->setSelectionMode(QAbstractItemView::MultiSelection);
If you would like to do this programatically, this is the way of doing it:
QModelIndexList itemSelection = tableView->selectionModel()->selectedColumns();
int currentColumn = itemSelection.first().column();
QItemSelection selectedItems = tableView->selectionModel()->selection();
tableView->selectColumn(1);
selectedItems.merge(tableView->selectionModel()->selection(), QItemSelectionModel::Select);
tableView->selectColumn(2);
selectedItems.merge(tableView->selectionModel()->selection(), QItemSelectionModel::Select);
tableView->selectionModel()->clearSelection();
tableView->selectionModel()->select(selectedItems, QItemSelectionModel::Select);
Disclaimer: the code has been taken from here, and then modified to suit your need.
Autres conseils
selectionModel.select()
in its select columns mode may be preferable.
In PyQt:
columns = [1,2,3]
indexes = [model.index(0, c) for c in columns]
mode = QtCore.QItemSelectionModel.Select | QtCore.QItemSelectionModel.Columns
[tableView.selectionModel().select(index, mode) for i in indexes]
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow