我在项目中使用QTableWidget。但是QTableWidget中没有搜索功能。你知道吗
How to set filter option in qtablewidget
QTableView允许搜索。但是这次QTableView,非英语字符没有正确排序。QTableWidget排序非常好。我想使用QTableView。如何修复QTableView中的非英语字符排序。你知道吗
QTableWidget代码
class GuiQTableWidget(QWidget):
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
self.setWindowTitle("QTableWidget")
v_box = QVBoxLayout()
v_box.addWidget(self.prepare_table())
self.setLayout(v_box)
self.setMinimumHeight(750)
self.setFixedWidth(self.width())
def prepare_table(self):
letter_list = [ 'A','B','C','Ç','G','Ğ','I','I','O','Ö','P','S','Ş','U','Ü','Y','Z',
'a','b','c','ç','g','ğ','ı','i','o','ö','p','s','ş','u','ü','y','z' ]
table = QTableWidget()
table.setColumnCount(1)
table.setHorizontalHeaderLabels(["Letter"])
table.setRowCount(len(letter_list))
for row, letter in enumerate(letter_list):
table.setItem(row, 0, QTableWidgetItem(letter))
h_header = table.horizontalHeader()
h_header.setSectionResizeMode(QHeaderView.Stretch)
table.setSortingEnabled(True)
table.setAlternatingRowColors(True)
return table
QTableView
class GuilQTableView(QWidget):
def __init__(self):
super().__init__()
self.init_ui()
# sort
self.h_header.sortIndicatorChanged.connect(self.sort)
# filter
self.line_search.textChanged.connect(self.filter)
def init_ui(self):
self.setWindowTitle("QTableView")
self.table = QTableView()
self.h_header = self.table.horizontalHeader()
self.model = QStandardItemModel()
self.proxyFilter = QSortFilterProxyModel()
self.line_search = QLineEdit()
lbl_search = QLabel("Letter Search")
h_search = QHBoxLayout()
h_search.addWidget(lbl_search)
h_search.addWidget(self.line_search)
v_box = QVBoxLayout()
v_box.addLayout(h_search)
v_box.addWidget(self.prepare_table(self.table, self.model, self.proxyFilter, self.h_header))
self.setLayout(v_box)
self.setMinimumHeight(750)
self.setFixedWidth(self.width())
def prepare_table(self, table, model, proxyFilter, h_header):
letter_list = [ 'A','B','C','Ç','G','Ğ','I','I','O','Ö','P','S','Ş','U','Ü','Y','Z',
'a','b','c','ç','g','ğ','ı','i','o','ö','p','s','ş','u','ü','y','z' ]
model.setColumnCount(1)
model.setRowCount(len(letter_list))
model.setHorizontalHeaderLabels(['Letter'])
for row, letter in enumerate(letter_list):
model.setItem(row, 0, QStandardItem(letter))
proxyFilter.setSourceModel(model)
proxyFilter.setFilterKeyColumn(0)
proxyFilter.setSortCaseSensitivity(Qt.CaseSensitive)
table.setModel(proxyFilter)
table.setAlternatingRowColors(True)
table.setSelectionBehavior(QAbstractItemView.SelectRows)
table.setSelectionMode(QAbstractItemView.ExtendedSelection)
h_header.setSectionResizeMode(QHeaderView.Stretch)
return table
def sort(self, sortOrder):
if sortOrder == Qt.AscendingOrder:
self.model.sort(0, Qt.AscendingOrder)
else:
self.model.sort(0, Qt.DescendingOrder)
self.h_header.setSortIndicatorShown(True)
def filter(self, text):
regExp = QRegExp(text, Qt.CaseInsensitive, QRegExp.Wildcard)
self.proxyFilter.setFilterRegExp(regExp)
QTableWidget排序正确。QTableView在列表底部列出了非英语字符(Ğ、G、Ğ、İ、Ş、Ü、ç、ğ、ı、ö、ş、ü)。 如何修复QTableView中的非英语字符排序。你知道吗
在} ,在本例中使用QString作为字符位置的引用,而QSortFilterProxyModel的情况使用python字符串,它不作为位置的引用,这就是为什么您看到这种差异,解决方案是覆盖
QTableWidget
的情况下,使用QTableWidgetItem
的^{lessThan()
的QSortFilterProxyModel
方法另一方面,没有必要使用
sortIndicatorChanged
信号,因为QTableView
在内部使用它来通知模型。你知道吗相关问题 更多 >
编程相关推荐