QModelIndex TreeModel::index(int row, int column, const QModelIndex &parent) const { TreeItem *parentItem; if (!parent.isValid()) parentItem = rootItem; else parentItem = static_cast<TreeItem*>(parent.internalPointer()); TreeItem *childItem = parentItem->child(row); if (childItem) return createIndex(row, column, childItem); else return QModelIndex(); }
QVariant value;TreeModel* treeModel;...QModelIndex cbIndex = treeModel->index(4, 0);treeModel->setData(cbIndex, value);
void QAbstractItemModel::rowsInserted ( const QModelIndex & parent, int start, int end ) [signal]
bool MyModel::insertRows(int pos, int rows, const QModelIndex &parent) { beginInsertRows(QModelIndex(), pos, pos+rows-1); ... endInsertRows(); return true; }
QAbstractItemView::setModel(QAbstractItemModel * model))
vector <CObject*> objects; // вектор указателей на базовый класс objects.push_back(new CPoint); //добавление объектов objects.push_back(new CCircle); objects.push_back(new CLine); vector <CObject*>::iterator iter; for (iter=objects.begin(); iter!=objects.end; ++iter) (*iter)->Draw(); //Отображение объектов на экране, виртуальная функция Draw() переопределенная для каждого объекта
class TreeItem{public: TreeItem(const QList<QVariant> &data, TreeItem *parent = 0); ~TreeItem(); void appendChild(TreeItem *child); TreeItem *child(int row); int childCount() const; int columnCount() const; QVariant data(int column) const; int row() const; TreeItem *parent(); QList<TreeItem*> childItems; CObject *pointer; //Указатель на объект Type type; //Тип объектаprivate: TreeItem *parentItem;};
TreeModel viewModel = new TreeModel(); TreeItem* item = new TreeItem(viewModel->rootItem); item->pointer = obj; viewModel->rootItem->appendChild(item);