代码拉取完成,页面将自动刷新
通过设置 setIndexWidget(QModelIndex, QWidget)
可以设置自定义 QWidget
QSortFilterProxyModel
lessThan
方法进行排序需求:
思路:
IdRole = Qt.UserRole + 1
用于恢复默认排序ClassifyRole = Qt.UserRole + 2
用于按照分类序号排序NameDict = {
'唐': ['Tang', 0],
'宋': ['Song', 1],
'元': ['Yuan', 2],
'明': ['Ming', 3],
'清': ['Qing', 4],
}
IndexDict = {
0: '唐',
1: '宋',
2: '元',
3: '明',
4: '清',
}
setData(id, IdRole)
用于恢复默认排序setData(cid, ClassifyRole)
用于标识该item的分类QSortFilterProxyModel
增加 setSortIndex(self, index)
方法, 目的在于记录要置顶(不参与排序)的分类IDdef setSortIndex(self, index):
self._topIndex = index
QSortFilterProxyModel
重写 lessThan
方法, 判断分类ID是否等于要置顶的ID, 如果是则修改为-1, 这样就永远在最前面if self.sortRole() == ClassifyRole and \
source_left.column() == self.sortColumn() and \
source_right.column() == self.sortColumn():
# 获取左右两个的分类
leftIndex = source_left.data(ClassifyRole)
rightIndex = source_right.data(ClassifyRole)
# 升序
if self.sortOrder() == Qt.AscendingOrder:
# 保持在最前面
if leftIndex == self._topIndex:
leftIndex = -1
if rightIndex == self._topIndex:
rightIndex = -1
return leftIndex < rightIndex
self.fmodel.setSortRole(IdRole) # 必须设置排序角色为ID
self.fmodel.sort(0) # 排序第一列按照ID升序
setSortRole
设置其它角色再设置目标角色self.fmodel.setSortIndex(1)
self.fmodel.setSortRole(IdRole)
self.fmodel.setSortRole(ClassifyRole)
self.fmodel.sort(0)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。