我有一个QTableWidget,并希望根据已经选择的内容选择项目(仅当它们在第二列中具有相同的内容时)。
我知道如何选择或不选择项目。但是一切都应该保持可选,这样用户就可以选择一个项目来重新开始选择。仅通过按住shift或ctrl来添加选择应允许/仅选择合适的项目。
我可以在哪里勾选以添加选择只接受合适的行?
注意:我正在使用PySide,但我可以使用C ++或PyQt代码。
答案 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)