如何排序查看项目

Posted

技术标签:

【中文标题】如何排序查看项目【英文标题】:How to sort View items 【发布时间】:2015-01-15 00:24:11 【问题描述】:

setSortingEnabled() 设置为True 可以单击列标题名称来对视图的项目进行排序:

tableView=QTableView()
tableView.setSortingEnabled(True) 

但是即使设置了属性,视图也会显示未排序的项目。 为了对项目进行排序,必须单击标题。 问题:如何让视图继续并在单击标题之前对其项目进行排序。 所以视图从一开始就直接排序。

【问题讨论】:

感谢您的链接!单击标题时可能会调用一个方法。如果可以,可以通过编程方式调用此方法吗? 看来我们可以通过调用headerObj=tableView.horizontalHeader()得到QTableView的头对象 根据文档 headerObj 的 .sortIndicatorChanged() 方法可疑地接近我们想要的。是否可以通过编程方式触发它? 虽然我可以将标头链接到任何方法:self.connect(taskViewHeader, SIGNAL('sortIndicatorChanged(int, Qt::SortOrder)'), self.sortChanged) 我无法以编程方式发出'sortIndicatorChanged 信号... 【参考方案1】:

您可以使用QHeaderView.setSortIndicator(logicalIndex, order)

对于您的示例,这意味着调用 tableView.horizontalHeader().setSortIndicator(0, Qt.AscendingOrder) 以升序对第一列进行排序。

请注意,如果列已重新排序,您传入的 logicalIndex 可能与 visualIndex 不对应。 QHeaderView 提供了在您需要时在两者之间进行转换的方法(但我认为您不太可能需要它)。

【讨论】:

太棒了!谢谢!现在我们有两种方法可以做到这一点! @Sputnix 是的,我不知道您回答的特定于 tableview 的方法。我的答案中的方法应该适用于所有类型的视图(如树视图),并将view.horizontalHeader() 适当更改为view.header()【参考方案2】:

要对QTableView() 进行排序而不点击其标题(假设设置了tableView.setSortingEnabled(True)),请使用:

tableView.sortByColumn(0, Qt.AscendingOrder)

【讨论】:

以上是关于如何排序查看项目的主要内容,如果未能解决你的问题,请参考以下文章

从各种来源中选择项目,并按日期排序

如何对 EdgeToEdgeStoreList 的项目进行排序

如何允许用户重新排序列表中的项目?

GitHub星数13200!用Python实现所有排序算法的开源项目你见过么?

将项目放在可排序区域上时如何删除可排序区域的文本?

如何通过 Observable 属性对项目数组进行排序?