我正在使用pyQt。如何禁用QTreeView/StandardItemModel中的子項排序?禁用QTreeView中子項的排序
1
A
回答
4
你可以使用一個QSortFilterProxyModel並重新實現其lessThan方法。
或者,創建一個QStandardItem的子類並重新實現其運算符less than。
這裏有一個簡單的例子,演示了後一種方法:
from random import sample
from PyQt4 import QtGui, QtCore
class Window(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.view = QtGui.QTreeView(self)
self.view.setHeaderHidden(True)
self.model = QtGui.QStandardItemModel(self.view)
self.view.setModel(self.model)
parent = self.model.invisibleRootItem()
keys = range(65, 91)
for key in sample(keys, 10):
item = StandardItem('Item %s' % chr(key), False)
parent.appendRow(item)
for key in sample(keys, 10):
item.appendRow(StandardItem('Child %s' % chr(key)))
self.view.sortByColumn(0, QtCore.Qt.AscendingOrder)
layout = QtGui.QVBoxLayout(self)
layout.addWidget(self.view)
class StandardItem(QtGui.QStandardItem):
def __init__(self, text, sortable=True):
QtGui.QStandardItem.__init__(self, text)
self.sortable = sortable
def __lt__(self, other):
if getattr(self.parent(), 'sortable', True):
return QtGui.QStandardItem.__lt__(self, other)
return False
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
1
相關問題
- 1. 如何使QTreeView總是先排序某個類別的項目?
- 2. 如何啓用/禁用基於QTreeView事件的項目?
- 3. 在ListView中排序子項
- 4. 禁用排序?
- 5. jQuery tablesorter子元素th禁用排序
- 6. 在jqGrid中禁用排序
- 7. NSMutableDictionary禁用排序
- 8. 禁用排序的NSDictionary
- 9. QTreeView中的列上隱藏的排序指示器
- 10. 如何在Perl的XML :: Simple中禁用子標籤排序?
- 11. 不能排序子項
- 12. PowerShell Exchange禁用OU中的OWA排序
- 13. 如何禁用NSTableVIew中的排序?
- 14. 如何禁用JQuery UI中的排序?
- 15. JQuery UI禁用排序列表中的重新排序
- 16. 如何禁用表datatables.js排序在這個例子中
- 17. 如何禁用NSTableView排序
- 18. RichFaces extendedDataTable禁用排序
- 19. dataTables暫時禁用排序
- 20. 禁用排序在Datagridview
- 21. 如何在QAbstractItemModel和QTreeView類中查找子項?
- 22. 使用啓用/禁用選項排序多個函數
- 23. 在linq c中禁用默認排序#
- 24. 無法在datagridview中禁用排序
- 25. jQuery UI - 如何禁用排序上的孩子拖動
- 26. 排序項目組的sqlite子查詢
- 27. Android和重新排序ViewGroup的子項
- 28. 如何禁用yadcf過濾器選項的自動排序?
- 29. 多列QTreeView/QAbstractItemModel子樹
- 30. 自定義QTreeView項目
so,key - 如果item不可排序(如果item在我的情況下不是頂級項目),則返回__lt__ compassion上的False? – 2012-01-27 21:19:29
@Andrewshkovskii。是。在你的情況下,它看起來像你可以使用普通的'QStandardItem'作爲頂層項目,然後從'__lt__'中爲所有子項目返回'False'(因此不需要'sortable'屬性)。 – ekhumoro 2012-01-27 21:42:23
謝謝,我會盡力:) – 2012-01-28 07:40:32