Я создал проверенные файлы/папки для отображения в виде дерева. Я сохраняю файлы/папки, которые отмечены, и записываю их в файл. Когда я снова запустил tree-view, я хочу, чтобы он проверял все пути, которые я сохранил. Но я не могу получить правильный указатель для путей.Получение указателя в древовидном представлении для доступного пути
class CheckableModel(QtGui.QFileSystemModel):
def __init__(self, tView, parent=None):
QtGui.QFileSystemModel.__init__(self, tView)
self.tView = tView
self.checks = {}
backupstr = fileread(os.path.join(os.path.expanduser("~"), "Desktop"), "saved.txt", "utf-16")
if backupstr:
backuplist = backupstr.split('\n')
for backupitem in backuplist:
self.setData(self.index(backupitem), QtCore.Qt(QtCore.Qt.Checked), QtCore.Qt.CheckStateRole)
Я попытался с помощью self.index(QString)
, но он не работает должным образом все время. Например, когда я пытаюсь удалить эту запись из self.checks
(после снятия отметки с загруженного таким образом узла), он не может найти этот индекс в self.checks
.
Итак, каков правильный способ получения индекса (QModelIndex
) в древовидном представлении, когда у нас есть только путь?
EDIT:
setData()
была реализована следующим образом:
def setData(self, index, value, role):
if (role == QtCore.Qt.CheckStateRole) and (index.column() == 0):
if value == QtCore.Qt.Checked:
self.removesubfolders(index)
self.checks[index] = value
count = self.rowCount(index)
self.dataChanged.emit(index.child(0, 0), index.child(count - 1, 0))
self.tView.collapse(index)
return True
elif value == QtCore.Qt.Unchecked:
self.removesubfolders(index)
self.tView.collapse(index)
return True
return QtGui.QFileSystemModel.setData(self, index, value, role)
def removesubfolders(self, index):
checkedItems = []
for otherindex, othervalue in self.checks.items():
if othervalue.toBool():
checkedItems.append(str(self.filePath(otherindex)))
uncheckpath = str(self.filePath(index))
indices = [removeindex for removeindex in checkedItems if (removeindex.find(uncheckpath) != -1)]
for idx in indices:
localidx = self.index(idx)
if localidx in self.checks:
self.checks.pop(localidx)
Не могли бы вы предоставить более полный пример? Например, как вы добавляете/удаляете запись из 'self.checks', поскольку это кажется проблемой? – Mel
Извините, я занят своим проектом. Я нашел работу. В настоящее время поддерживается ведение файлов/папок для отслеживания отмеченных элементов (как указано в ответе). Кажется, это работает. Если вы можете предложить исправления или предоставить альтернативное решение, оно будет очень оценено. – Harsh