【问题标题】:How to select multiple rows in QTableView using selectionModel如何使用 selectionModel 在 QTableView 中选择多行
【发布时间】:2016-05-04 18:54:17
【问题描述】:

与:

tableView = QTableView()
rows = [0, 1, 2]

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

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

【问题讨论】:

    标签: python qt pyqt qtableview selectionmodel


    【解决方案1】:

    你应该设置选择模式。

    tableView->setSelectionMode(QAbstractItemView::MultiSelection);
    

    【讨论】:

    • 谢谢!将选择模式设置为MultiSelection 需要使用什么命令来选择第 0 行和第 2 行以便同时选择两行?
    • 这取决于你如何实现。用户将能够同时选择两者。试试 tableView->setSelectionBehavior(QAbstractItemView::SelectItems);
    • 再次感谢!我想知道如何从函数(代码)内部(而不是用户交互)在 QTableView 中选择多个项目。抱歉不清楚。
    【解决方案2】:

    代码创建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_()
    

    【讨论】:

    • 解释得很好!
    【解决方案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]
    

    【讨论】:

      猜你喜欢
      • 2011-08-21
      • 2011-04-21
      • 2015-03-15
      • 2021-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多