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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: помогите разобраться с QAbstractItemModel  (Прочитано 3331 раз)
Ximik
Гость
« : Март 15, 2009, 17:23 »

Задача: построить дерево на базе QTreeView. Собственно имеется список elements с объектами, которые нужно вывести. И каждый объект имеет несколько свойств, которые нужно вывести как child ветки-объекта. Делаю это так   

Код:
MyListModel::MyListModel(QObject *parent) :
        QAbstractItemModel(parent)
{
    this->columns << tr("1") << tr("2") << tr("3");
}
int MyListModel::rowCount(const QModelIndex &parent) const
{
    if (!parent.isValid()) return elements.count(); //Количество объектов
    if (parent.column() == 0) return elements.at(parent.row())->count(); //Количество свойств
    return 0;
}
int MyListModel::columnCount(const QModelIndex &parent) const
{
    if (!parent.isValid()) return this->columns.count();
    return 1;
}
bool MyListModel::hasChildren(const QModelIndex &parent) const
{
    if (!parent.isValid() || parent.internalId() == -1) return true;
    return false;
}
QModelIndex MyListModel::index(int row, int column, const QModelIndex &parent) const
{
    if (!parent.isValid()) return createIndex(row, column, -1); //Это объект, ставлю ему id=-1
    return createIndex(row, column, parent.row()); //Это свойство объекта, ставлю ему id по номеру объекта
}
QModelIndex MyListModel::parent(const QModelIndex &child) const
{
    QVariant id = child.internalId();
    if (id != -1){ //Если это свойство - у него есть parent
       bool *ok;
       return createIndex(id.toInt(ok), 0, -1); //Отдаю родителя
    }
    return QModelIndex(); //Отдаю корень
}

Выводится только объекты, без свойств.


эм Криво как-то объяснил, но, надеюсь, поняли о чём я. Грустный
Записан
EhTemka
Гость
« Ответ #1 : Март 17, 2009, 19:04 »


Код
C++ (Qt)
int MyListModel::columnCount(const QModelIndex &parent) const
{
   if (!parent.isValid()) return this->columns.count();
   return 1;
}

Попробуй тут возвращать одинаковое количество колонок и  для детей и для родителей

Код
C++ (Qt)
int MyListModel::columnCount(const QModelIndex &parent) const
{
  return this->columns.count();  
}


Хотя не уверен, что поможет  Непонимающий

Можно весь класс с объявлением увидеть?
Записан
Ximik
Гость
« Ответ #2 : Март 19, 2009, 10:52 »

Нашёл таки проблему

Код:
QModelIndex MyListModel::parent(const QModelIndex &child) const
{
    int id = child.internalId();
    if (id != -1) return createIndex(id, 0, -1); //Отдаю родителя
    return QModelIndex(); //Отдаю корень
}

так работает
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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