Класс QModelIndex

   
На этом шаге рассмотрим класс QModelIndex.

   
Итак, мы определили структуру данных, представляющую собой таблицу. Теперь нам нужен способ для получения доступа к каждому ее элементу. Например, для двумерной таблицы без иерархии это означает, что мы могли бы использовать строку и столбец, чего было бы достаточно. Но при использовании иерархии нам понадобится другое решение. В этом случае нужно знать дополнительную информацию относительно строки и столбца. Эта информация и будет индексом модели.

   
Индекс модели — это небольшой список объектов, который используется для адресации ячейки в таблице, имеющей иерархию. Индекс модели представляет собой информацию, состоящую из трех частей: строки, столбца и внутреннего идентификатора. Внутренний идентификатор зависит от реализации; это может быть указатель или, например, целочисленный индекс.

   
Каждая ячейка таблицы имеет уникальный индекс, который представлен классом QModelIndex. Индексы класса QModelIndex запоминать в программе не имеет смысла, т. к. они могут измениться, например, после сортировки. Однако ими удобно пользоваться для получения текущих значений ячеек таблицы с помощью метода QAbstractItemModel::data(). Получить индекс модели для любой ячейки можно методом QAbstractItemModel::index(), при помощи которого можно двигаться по всей структуре данных. Например, для того чтобы узнать значение ячейки с координатами (2, 5), нужно проделать следующее:

QModelIndex index = pModel->index(2, 5, QModelIndex());
QVariant value = pModel->data(index);

   
Может получиться так, что подтаблица не располагает элементом с заданными нами координатами (2, 5). В этом случае метод index() возвратит пустой индекс (invalid index). Является ли индекс действительно неверным или пустым, можно проверить вызовом метода QModelIndex::isValid().

   
Класс QModelIndex имеет метод data(), это очень удобно, т. к. имея только объект этого класса, нам вовсе не обязательно обращаться к его модели, для того чтобы получить доступ к данным.

   
На следующем шаге рассмотрим организацию иерархических данных.

Предыдущий шаг
Содержание
Следующий шаг



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий