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

如何仅允许在QTableWidget中多选择某些项目?,qt,pyqt,pyside,qt4.8,Qt,Pyqt,Pyside,Qt4.8,我有一个QTableWidget,希望项目只有在第二列中的内容相同时才能根据已经选择的内容进行选择 我知道如何使项目可选或不可选。但所有内容都应保持可选择状态,以便用户可以选择单个项目以重新开始选择。只有通过按住shift或ctrl键添加到选择中,才允许/选择合适的项目 我可以挂接到哪里以使添加到选择中只接受合适的行 注意:我使用PySead,但我可以从C++或PyQT代码中工作。 < P>可以连接到QTable WistGe.ItMeistPosivchange的信号,并根据选择修改表中所有其

我有一个QTableWidget,希望项目只有在第二列中的内容相同时才能根据已经选择的内容进行选择

我知道如何使项目可选或不可选。但所有内容都应保持可选择状态,以便用户可以选择单个项目以重新开始选择。只有通过按住shift或ctrl键添加到选择中,才允许/选择合适的项目

我可以挂接到哪里以使添加到选择中只接受合适的行

注意:我使用PySead,但我可以从C++或PyQT代码中工作。

< P>可以连接到QTable WistGe.ItMeistPosivchange的信号,并根据选择修改表中所有其他项目的Q.ITEMISStAdvable标记。
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)

也许你可以把QitemSelectionModel子类化,然后呢?重载select可能会让我半途而废,但在理想情况下,我甚至不希望在按住shift键和ctrl键时,鼠标悬停在项目上方时显示可选择的项目。每次按下cttrl/shift时更改ItemsSelectable标志似乎很糟糕。当鼠标悬停在项目上时,项目显示为可选,这是什么意思?在我看来,当鼠标悬停在可选择项和不可选择项上时,它们之间似乎没有任何区别。我认为你可以重载QItemSelectionModel的两种选择方法,并根据已选择的项目选择项目,但不确定,我从未做过类似的事情。你是对的,鼠标悬停在可选择和不可选择的项目上,它们看起来是一样的。但启用的图标为浅蓝色,未启用的项目为浅灰色。因此,我必须更改ItemIsEnabled标志而不是ItemIsSelectable。如果不按住shift键或ctrl键,则无法选择新项目来替换当前选择。是否可以选择取决于当前选择是被替换还是被扩展。在进行新选择之前,您只需取消选择当前选择即可。