如何使用selectionModel在QTableView中选择多行

alp*_*ric 2 python qt pyqt selectionmodel qtableview

带有:

tableView = QTableView()
rows = [0, 1, 2]
Run Code Online (Sandbox Code Playgroud)

tableView.selectRow(0)否则tableView.selectRow(2)在这种情况下将不起作用,因为selectRow()仅选择单个行,而取消选择所有其他行。

selectionModel().select()可用的方法。但是它接受QSelectionItems对象作为参数。我们如何声明QSelectionItem具有行号的对象?

Onu*_*una 6

您应该设置选择模式。

tableView->setSelectionMode(QAbstractItemView::MultiSelection);
Run Code Online (Sandbox Code Playgroud)

  • 再次感谢!我想知道如何从函数(代码)内部(而不是从用户交互)在 QTableView 中选择多个项目。抱歉没说清楚。 (2认同)

alp*_*ric 5

该代码创建了一个QTableViewQPushButton。按下按钮将按连续顺序选择索引(从index1index2。是否可以按任何顺序选择索引仍然是一个悬而未决的问题。

在此处输入图片说明

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_()
Run Code Online (Sandbox Code Playgroud)