Russian Qt Forum

Qt => Model-View (MV) => Тема начата: Ximik от Март 15, 2009, 17:23



Название: помогите разобраться с QAbstractItemModel
Отправлено: 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(); //Отдаю корень
}

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


эм Криво как-то объяснил, но, надеюсь, поняли о чём я. :(


Название: Re: помогите разобраться с QAbstractItemModel
Отправлено: EhTemka от Март 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();  
}


Хотя не уверен, что поможет  ???

Можно весь класс с объявлением увидеть?


Название: Re: помогите разобраться с QAbstractItemModel
Отправлено: Ximik от Март 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(); //Отдаю корень
}

так работает