我在使用我指定的字段中的值对QListView
中的项目进行排序时遇到了问题。
基本上我正在尝试做的是:
QListView
我这样做的方法是将列表中每个UserRole
的{{1}}字段之一设置为群集标签,然后尝试按QStandardItem
进行排序对此QStandardModel
。然后,这将显示彼此相邻的同一群集中的项目(即,UserRole
中具有相同的群集标签)。
我能够为项成功设置UserRole
但是调用UserRole
上的sort函数没有对项进行排序,即使我将排序角色设置为默认值{{ 1}}(即按照每张脸的文字标签排序)按预期工作。
有人能告诉我我的代码有什么问题或提供替代方法吗?我用google搜索排序列表,我在QSortFilterProxyModel找到了以下链接,但由于我对Qt很新,我无法适应我的情况。
预先感谢任何回复。
以下是相关代码:
QStandardModel
答案 0 :(得分:1)
您发布的代码没有任何问题。所以你使用它的方式一定有问题。你是如何生成集群标签的?
以下是使用FacesView
类的测试脚本,按照您的意图进行排序:
from random import randint
from PySide.QtGui import QWidget, QPushButton, QVBoxLayout, QApplication
from facesview import FacesView
class Window(QWidget):
def __init__(self):
QWidget.__init__(self)
self.list = FacesView(self)
self.button = QPushButton('Test', self)
self.button.clicked.connect(self.handleButton)
layout = QVBoxLayout(self)
layout.addWidget(self.list)
layout.addWidget(self.button)
def handleButton(self):
labels = []
self.list.model().setRowCount(0)
for row in range(10):
labels.append(randint(0, 3))
text = 'Item(%d) - Cluster(%d)' % (row, labels[-1])
self.list.addItem(text, 'icon.png')
self.list.updateFaceClusters(labels)
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())