Задача: построить дерево на базе 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(); //Отдаю корень
}
Выводится только объекты, без свойств.
эм Криво как-то объяснил, но, надеюсь, поняли о чём я.