Russian Qt Forum

Qt => Model-View (MV) => Тема начата: Maverick от Апрель 26, 2011, 12:07



Название: Не получается отобразить дерево
Отправлено: Maverick от Апрель 26, 2011, 12:07
Здравстуйте. Столкнулся со следующей проблемой. Есть класс модели FilePlacesModel, потомок от QAbstractItemModel. Есть класс FilePlacesItem, в котором реализованы элементы, отображаемые в дереве. Интерфейс класса элемента дерева:

Код:
class FilePlacesItem : public QObject
{
    Q_OBJECT
public:
    FilePlacesItem(KBookmarkManager *manager,
                    const QString &address,
                    const QString &udi = QString(),
   FilePlacesItem *parent = 0);
    ~FilePlacesItem();

    
  void appendChild(KFilePlacesItem *child);
     FilePlacesItem *child(int row);
     int childCount() const;
     int row() const;
     FilePlacesItem *parent();
     QList<FilePlacesItem*> childItems; // ветвь дерева
}
То есть, каждая ветвь дерева хранится в виде списка элементов FilePlacesItem.

У класса модели есть метод, который читает данные об элементах дерева с диска, заполняет дерево и  возвращает указатель заполненное дерево:
Код:
FilePlacesItem *FilePlacesModel::loadItemList()

При вызове данного метода отдаю ему в качестве указателя на корневой элемент дерева указатель FilePlacesItem *currentItem.
После вызова этого метода получаю указатель на заполненное дерево.

 Далее стоит задача отобразить дерево на экране. В связи с тем что дерево содержит всего два уровня, пытаюсь сделать это так:
Дерево пытаюсь построить следующим образом: (rootItem - корневой элемент дерева, которое будет отображаться при помощи модели представления)
Код:
    for(int i=0; i < currentItems->childCount(); i++) // Проходим все ветки первого уровня, currentItems - указатель 
    {
        q->beginInsertRows(QModelIndex(), i, i);
        rootItem->appendChild(currentItems->child(i));
        q->endInsertRows();

for(int j=0; j<currentItems->child(i)->childCount(); j++)
{
   qDebug("_k_createFolders(): create places, row = %d", j);
   q->beginInsertRows(q->index(i, 0, QModelIndex()), j, j);
             // Насколько я понимаю в связи с тем что все элементы второго уровня дерево с корневым элементом rootItem получило
              // ранее при добавлении в него элементов первого уровня, здесь можно никаких операций не производить
   q->endInsertRows();
}
     }


Для отображения модели используется класс - потомок от QTreeView.

При этом строится только первый уровень дерева, то есть элементы - потомки корня. Второй уровень не отображается. Кто может подсказать где я накосячил? С QT только начинаю разбираться, поэтому прошу указать на все совершенные ошибки и, по возможности, сильно не бить.