QTableView 如何以编程方式选择多个列

Posted

技术标签:

【中文标题】QTableView 如何以编程方式选择多个列【英文标题】:QTableView How to select multiple columns programmatically 【发布时间】:2014-04-13 16:31:07 【问题描述】:

我正在尝试在代码中选择 QTableView 的两列。不幸的是,当我打电话时

tableView->selectColumn(1)
tableView->selectColumn(2)

它选择第一列,取消选择第一列并选择第二列。是否可以在代码中选择多列?

【问题讨论】:

【参考方案1】:

如果只需要保证允许用户选择多列,则需要to set upproper selection mode如下:

tableView->setSelectionMode(QAbstractItemView::MultiSelection);

如果您想以编程方式执行此操作,这就是这样做的方式:

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);

免责声明:代码已采用from here,然后根据您的需要进行修改。

【讨论】:

谢谢!这就是我要找的。​​span> 【参考方案2】:

selectionModel.select() 在其 选择列 模式下可能更可取。

在 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]

【讨论】:

以上是关于QTableView 如何以编程方式选择多个列的主要内容,如果未能解决你的问题,请参考以下文章

Qt Qtableview没有得到标题项目点击的信号

Qt/QTableView/SQLite如何连接?

pyqt qt4 QTableView 如何禁用某些列的排序?

Qt如何按比例分配QTableView的列宽并且充满整个控件

QT中如何删除QTableView自动生成的数字序号列?

以编程方式选择scala spark中的多个列[重复]