问题描述
我正在使用QSortFilterProxyModel,并且正在寻找一种在QtView:QTreeView中的5.6.1中执行递归搜索的解决方案。
由于在更高版本的QT中添加了setRecursiveFilteringEnabled,因此我可以使用setRecursiveFilteringEnabled方法
我当前正在使用:
由于无法使用setRecursiveFilteringEnabled,如何过滤整个层次结构?
from pyside2 import QtGui,QtCore,QtWidgets
class MainFrame(QtWidgets.QDialog):
def __init__(self,parent=None):
super(MainFrame,self).__init__(parent)
tree = {
"Root": {
"Level1": {
"Level1_item1": 14,"Level1_item2": 12,"Level1_item3": 3.55,},"Level2": {
"Level2_SubLevel1": {
"Level2_SubLevel1_item1": 3.52,"Level2_SubLevel1_item2": 2.55,"Level2_SubLevel1_item3": 13,"Level2_SubLevel2": {
"Level2_SubLevel2_item1": 2,"Level2_SubLevel2_item2": 4,"Level2_SubLevel2_item3": 3.11,"Level3": {
"Level3_item1": 12,"Level3_item2": 13.55,"Level3_item3": 122,}
self.tree = QtWidgets.QTreeView()
self.filterEdit = QtWidgets.QLineEdit()
self.filterEdit.textChanged.connect(self.onTextChanged)
layout = QtWidgets.QVBoxLayout(self)
layout.addWidget(self.filterEdit)
layout.addWidget(self.tree)
self.root_model = QtGui.QStandardItemmodel()
self.root_model.setHorizontalHeaderLabels(["Level","Values"])
self.fill_model_from_json(self.root_model.invisibleRootItem(),tree)
self.proxyModel = QtCore.QSortFilterProxyModel(self)
self.proxyModel.setFilterKeyColumn(0)
# Following call is not available in QT 5.6.1
# self.proxyModel.setRecursiveFilteringEnabled(True)
self.proxyModel.setSourceModel(self.root_model)
self.tree.setModel(self.proxyModel)
self.tree.header().setMinimumSectionSize(300)
self.tree.expandAll()
self.resize(640,480)
def onTextChanged(self,text):
self.proxyModel.setFilterRegExp(text)
self.tree.expandAll()
def fill_model_from_json(self,parent,d):
if isinstance(d,dict):
for key,value in d.items():
it = QtGui.QStandardItem(str(key))
if isinstance(value,dict):
parent.appendRow(it)
self.fill_model_from_json(it,value)
else:
it2 = QtGui.QStandardItem(str(value))
parent.appendRow([it,it2])
d = MainFrame()
d.show()
# if __name__ == "__main__":
# import sys
# app = QtWidgets.QApplication(sys.argv)
# main = MainFrame()
# main.show()
# sys.exit(app.exec_())
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)