Russian Qt Forum
Ноябрь 24, 2024, 00:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Не получается отобразить дерево  (Прочитано 1920 раз)
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 только начинаю разбираться, поэтому прошу указать на все совершенные ошибки и, по возможности, сильно не бить.
« Последнее редактирование: Апрель 26, 2011, 12:09 от Maverick » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.048 секунд. Запросов: 21.