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?

有帮助吗?

解决方案

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.

其他提示

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]
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top