QTreeView + Таблица БД, есть вопрос

Модератор: Модераторы разделов

Аватара пользователя
anterior
Сообщения: 266
ОС: Debian amd64

QTreeView + Таблица БД, есть вопрос

Сообщение anterior »

Здравствуйте, у меня есть вопрос. Допустим есть такая таблица:

Код: Выделить всё

mysql> select * from EnumerateGroups;
+----+---------+------------------+-----------+-------------+
| id | Root_id | name             | aliasname | description |
+----+---------+------------------+-----------+-------------+
|  1 |       0 | parent_one       | NULL      | NULL        |
|  2 |       0 | parent_two       | NULL      | NULL        |
|  3 |       1 | child_one1       | NULL      | NULL        |
|  4 |       1 | child_one2       | NULL      | NULL        |
|  5 |       0 | parent_three     | NULL      | NULL        |
|  6 |       5 | child_three1     | NULL      | NULL        |
|  7 |       4 | child_for_child1 | NULL      | NULL        |
|  8 |       4 | child_for_child2 | NULL      | NULL        |
+----+---------+------------------+-----------+-------------+


Нужно создать TreeView в котором отображалось бы что-то вроде:

Код: Выделить всё

- parent_one
|--- child_one1
|--- child_one2
|------ child_for_child1
|------ child_for_child2
- parent_two
- parent_three
|--- child_three1


Ну то что мне на голову приходит это(на Питоне):

Код: Выделить всё

def findItem(ident, model):
    numRows = model.rowCount()
    for row in xrange(numRows):
       if int(model.index(row, 0).data().toString()) == ident:
          return model.index(row, 0)
    return None

self.tree = MyTreeView(self)
self.tree.setColumnCount(3)
data = QtSql.QSqlQuery("SELECT id, Root_id, name FROM EnumerateGroups", self.db)

while data.next():
     parent = findItem(int(data.value(1).toString()), self.tree.model())
     if parent != None:
        item = QtGui.QTreeWidgetItem(self.tree.itemFromIndex(parent))
     else:
        item = QtGui.QTreeWidgetItem(self.tree)

     item.setText(0, data.value(0).toString())
     item.setText(1, data.value(1).toString())
     item.setText(2, data.value(2).toString())


И этот код работает, но только если количество уровней не более 2х. Он бы и работал при любом количестве уровней если бы model.index(Х, 0) перемещалось не только по родителям но и по потомкам. Может кто подскажет как лучше сделать?
Спасибо сказали:
Аватара пользователя
nonstop
Сообщения: 132
ОС: Slackware

Re: QTreeView + Таблица БД, есть вопрос

Сообщение nonstop »

я работал с QTreeWidget
там у класса QTreeWidgetItem есть метод addChild

посмотрел доки, нашел

Код: Выделить всё

QModelIndex QAbstractItemModel::index ( int row, int column, const QModelIndex & parent = QModelIndex() ) const

судя по этому описанию метод index ходит только по непосредственным детям QModelIndex(), т.е. rootNode по умолчанию, чтобы добраться до нижних ветвей нужно указывать parent = node_к_детям_которой_надо_добраться
slackware - linux for human brains
Спасибо сказали: