我正在开发一个项目,我需要在树视图中显示一些文件夹。我有一个完整的文件路径列表,如:
等
文件路径实际存储在我通过运行查询获取的sql server中。
我正在寻找一种方法将其放入QTreeView。
我已尝试使用QFileSystemModel并使用setNameFilters,但这不起作用,因为您无法在过滤器中输入路径。
有人建议使用QSortFilterProxyModel,但我不知道如何做到这一点。
感谢。
汤姆。
答案 0 :(得分:1)
请看下面的例子是否适合你:
import sys
from PyQt4 import QtGui, QtCore
class TestSortFilterProxyModel(QtGui.QSortFilterProxyModel):
def __init__(self, parent=None):
super(TestSortFilterProxyModel, self).__init__(parent)
self.filter = ['folder0/file0', 'folder1/file1'];
def filterAcceptsRow(self, source_row, source_parent):
index0 = self.sourceModel().index(source_row, 0, source_parent)
filePath = self.sourceModel().filePath(index0)
for folder in self.filter:
if filePath.startsWith(folder) or QtCore.QString(folder).startsWith(filePath):
return True;
return False
class MainForm(QtGui.QMainWindow):
def __init__(self, parent=None):
super(MainForm, self).__init__(parent)
model = QtGui.QFileSystemModel(self)
model.setRootPath(QtCore.QDir.currentPath())
proxy = TestSortFilterProxyModel(self)
proxy.setSourceModel(model)
self.view = QtGui.QTreeView()
self.view.setModel(proxy)
self.setCentralWidget(self.view)
def main():
app = QtGui.QApplication(sys.argv)
form = MainForm()
form.show()
app.exec_()
if __name__ == '__main__':
main()
希望这有帮助,尊重