如何只允许在QTableWidget中多次选择某些项目?

时间:2016-03-24 09:16:53

标签: qt pyqt pyside qt4.8

我有一个QTableWidget,并希望根据已经选择的内容选择项目(仅当它们在第二列中具有相同的内容时)。

我知道如何选择或不选择项目。但是一切都应该保持可选,这样用户就可以选择一个项目来重新开始选择。仅通过按住shift或ctrl来添加选择应允许/仅选择合适的项目。

我可以在哪里勾选以添加选择只接受合适的行?

注意:我正在使用PySide,但我可以使用C ++或PyQt代码。

1 个答案:

答案 0 :(得分:-1)

您可以连接到QTableWidget.itemSelectionChanged信号,并根据选择修改表格中所有其他项目的Qt.ItemIsSelectable标记。

from itertools import product

table = QtGui.QTableWidget()
table.itemSelectionChanged.connect(self.on_itemSelectionChanged)

@QtCore.pyqtSlot()
def on_itemSelectionChanged(self):
    sel_items = self.table.selectedItems()

    # get all items in table
    items = []
    for r, c in product(range(self.table.rowCount()), range(self.table.columnCount())):
        items.append(self.table.item(r, c)

    # Loop through all the items in the table and
    # set the selection flag based of already selected items.
    for item in items:
        if can_be_selected:
            item.setFlags(item.flags() | QtCore.Qt.ItemIsSelectable)
        else:
            item.setFlags(item.flags() & ~QtCore.Qt.ItemIsSelectable)