在QTableView的列中显示下拉列表并根据下拉列表进行过滤,可以通过以下步骤实现:
class ComboBoxDelegate(QStyledItemDelegate):
def paint(self, painter, option, index):
options = QStyleOptionComboBox()
options.rect = option.rect
options.currentText = index.data()
options.state = QStyle.State_Enabled
if option.state & QStyle.State_Selected:
options.state |= QStyle.State_Selected
QApplication.style().drawComplexControl(QStyle.CC_ComboBox, options, painter)
def createEditor(self, parent, option, index):
editor = QComboBox(parent)
editor.addItems(index.data())
return editor
table_view = QTableView()
delegate = ComboBoxDelegate()
table_view.setItemDelegateForColumn(column_index, delegate)
model = QStandardItemModel()
table_view.setModel(model)
# 填充数据
for row in range(row_count):
for column in range(column_count):
item = QStandardItem(data[row][column])
model.setItem(row, column, item)
class FilterProxyModel(QSortFilterProxyModel):
def __init__(self, parent=None):
super(FilterProxyModel, self).__init__(parent)
self.filters = {}
def setFilter(self, column, value):
self.filters[column] = value
self.invalidateFilter()
def filterAcceptsRow(self, source_row, source_parent):
model = self.sourceModel()
for column, value in self.filters.items():
index = model.index(source_row, column, source_parent)
if index.data() != value:
return False
return True
filter_proxy_model = FilterProxyModel()
filter_proxy_model.setSourceModel(model)
table_view.setModel(filter_proxy_model)
editor = QComboBox()
editor.addItems(['Option 1', 'Option 2', 'Option 3'])
editor.currentIndexChanged.connect(lambda: filter_proxy_model.setFilter(column_index, editor.currentText()))
通过以上步骤,可以在QTableView的列中显示下拉列表并根据下拉列表进行过滤。
领取专属 10元无门槛券
手把手带您无忧上云