QTreeWidget и PyQt: методы для сохранения и чтения данных обратно из файла - PullRequest
1 голос
/ 08 декабря 2011

Я работаю над проектом, который содержит QTreeWidget. Этот виджет будет иметь родительские узлы с дочерними узлами и / или другими узлами. К каждому узлу будет прикреплен уникальный ID в виде целого числа, а также имени.

Теперь ..... какие методы можно или нужно использовать для сохранения всех узлов в QTreeWidget на диск и как их прочитать обратно в ?????

То, что я хотел бы сделать, - это пройтись по дереву и сохранить каждый узел в базу данных sqlite. Я уже могу сделать это в том же порядке, что и в дереве. НО ...... QTreeWidget и связанные с ним QTreeWidgetItem объекты НЕ имеют уникального индекса, который можно использовать для вставки других узлов вокруг.

Когда я перестраиваю дерево, дети должны быть привязаны к своим родителям / предкам (которые к тому времени существуют в дереве). Для этого я отслеживаю родителей и их ID, которые я уже добавил в дерево, например (имя родителя, parentID) внутри массива. Обратите внимание, что parentID не имеет никакого отношения к расположению как узлу внутри QTreeWidget / WidgetItem. Он создается мной и хранится в базе данных sqlite db с именем узла, так же как какой-то тег, поскольку QTreeWidget / QTreeWidgetItem не предоставляет никаких.

Чтобы определить правильный родитель I

  1. взять ParentID из базы данных sqlite,
  2. поиск в массиве или QTreeWidget для того же ID,
  3. выберите этого родителя в QTreeWidget,
  4. добавить элемент базы данных sqlite в качестве дочернего узла к родительскому элементу в treeview.

Но это кажется неуклюжим из-за поиска каждый раз, когда добавляется узел, и из-за отсутствующего индекса внутри QTreeWidget / WidgetItem, который я могу использовать для вставки узлов вокруг.

Я знаю, что это должно быть сделано намного элегантнее и менее ресурсоемко. Я не ищу точные примеры кодирования, но больше для идей и подсказок методов и свойств для использования из QTreeWidget и QTreeWidgetItem.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 14 февраля 2013

Я справился с этим, используя свойство данных TreewidgetItem, установив в нем значение. Использование этого значения в качестве ссылки для поиска одного или нескольких или даже всех объектов TreewidgetItem упрощает сохранение всего дерева.

0 голосов
/ 08 декабря 2011

Разве не было бы более естественно сериализовать ваш treewidget как xml?

Если это так, пример QXmlStream Bookmarks может послужить источником вдохновения.

...