如何排序查看项目
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 的项目进行排序