如何使用 selectionModel 在 QTableView 中选择多行
Posted
技术标签:
【中文标题】如何使用 selectionModel 在 QTableView 中选择多行【英文标题】:How to select multiple rows in QTableView using selectionModel 【发布时间】:2016-05-04 18:54:17 【问题描述】:与:
tableView = QTableView()
rows = [0, 1, 2]
tableView.selectRow(0)
或 tableView.selectRow(2)
在这种情况下不起作用,因为 selectRow()
只选择单行而取消选择所有其他行。
有selectionModel().select()
方法可用。但它接受QSelectionItem
s 对象作为参数。我们如何声明具有行号的QSelectionItem
对象?
【问题讨论】:
【参考方案1】:你应该设置选择模式。
tableView->setSelectionMode(QAbstractItemView::MultiSelection);
【讨论】:
谢谢!将选择模式设置为MultiSelection
需要使用什么命令来选择第 0 行和第 2 行以便同时选择两行?
这取决于你如何实现。用户将能够同时选择两者。试试 tableView->setSelectionBehavior(QAbstractItemView::SelectItems);
再次感谢!我想知道如何从函数(代码)内部(而不是用户交互)在 QTableView 中选择多个项目。抱歉不清楚。【参考方案2】:
代码创建QTableView
和QPushButton
。按下按钮以连续顺序选择索引(从index1
到index2
。是否可以按任何顺序选择索引仍然是一个未解决的问题。
def clicked():
tableView.setFocus()
selectionModel = tableView.selectionModel()
index1 = tableView.model().index(0, 0)
index2 = tableView.model().index(1, 2)
itemSelection = QtGui.QItemSelection(index1, index2)
selectionModel.select(itemSelection, QtGui.QItemSelectionModel.Rows | QtGui.QItemSelectionModel.Select)
app = QtGui.QApplication([])
window = QtGui.QWidget()
window.resize(400, 300)
tableView = QtGui.QTableView()
model = QtGui.QStandardItemModel(4, 2)
for row in range(0, 4):
for column in range(0, 3):
item = QtGui.QStandardItem("%s , %s"%(row, column))
model.setItem(row, column, item)
tableView.setModel(model)
selectionModel = QtGui.QItemSelectionModel(model)
tableView.setSelectionModel(selectionModel)
button = QtGui.QPushButton('Select from 0,0 to 1,2')
button.clicked.connect(clicked)
layout = QtGui.QVBoxLayout()
layout.addWidget(tableView)
layout.addWidget(button)
window.setLayout(layout)
window.show()
app.exec_()
【讨论】:
解释得很好!【参考方案3】:select()
也可以接受索引(以及选择行的模式),所以你可以这样做:
rows = [1,2,3]
indexes = [model.index(r, 0) for r in rows]
mode = QtCore.QItemSelectionModel.Select | QtCore.QItemSelectionModel.Rows
[tableView.selectionModel().select(index, mode) for i in indexes]
【讨论】:
以上是关于如何使用 selectionModel 在 QTableView 中选择多行的主要内容,如果未能解决你的问题,请参考以下文章
PyQt acess selectionChanged Content
QListView selectionModel 不发送 selectionChanged 信号