Russian Qt Forum

Qt => Model-View (MV) => Тема начата: m.lyakishev от Ноябрь 10, 2010, 17:18



Название: Помогите разобраться с QAbstractItemModel и QAbstractItemView
Отправлено: m.lyakishev от Ноябрь 10, 2010, 17:18
Всем доброго времени суток!

Я только начал изучать Qt. Есть такая вот задача:
Имеется некоторая структура данных, к которой надо получить доступ для ее просмотра и изменения.
Кроме того, имеется графическое окно, в котором рисуются оъекты на основании значений точек,
заданных в структуре данных.

Для отображения структуры данных я думал использовать QAbstractItemModel(собственно, и использовал, создал
индексы для древовидной структуры, забил через model->setData() данные).
И пытаюсь понять вот что. Те данные, которые занесены в модель, имеют связь с теми данными, которые
мы изначально занесли из структуры данных? И если нет, то как тут поступить?
Кроме того, интересует вопрос, как передавать значения из модели в QGLWidget. Я думаю, что
тут подойдет сигнал dataChanged(), который должен генерировать следующий сигнал, уже несущий
полезную информацию о точках, которую сможет принять через слот QGLWidget. Не знаю, верно ли это.

Всем, кто ответит что-нибудь дельное по этим, думаю, простым вопросам, заранее большое спасибо!


Название: Re: Помогите разобраться с QAbstractItemModel и QAbstractItemView
Отправлено: Пантер от Ноябрь 10, 2010, 17:21
QAbstractItemModel используется не для отображения, а для хранения данных. Не нужно через setData вносить данные, модель сама должна обращаться к структурам и выдавать данные.
А по отображению в твоем случае помочь не могу.


Название: Re: Помогите разобраться с QAbstractItemModel и QAbstractItemView
Отправлено: m.lyakishev от Ноябрь 11, 2010, 15:47
Спасибо за ответ.

А можно чуть подробнее?

Например, вот кусок моей структуры(класса):

class PrimeFigure
{
public:
   int prime_geometry_type;
   float base_points[4][3];
...
};

Если хочется видеть через QTreeView, например, точки base_points[][] и иметь возможность их изменять, как в данном случае указать модели на эти точки?


Название: Re: Помогите разобраться с QAbstractItemModel и QAbstractItemView
Отправлено: crossly от Ноябрь 11, 2010, 16:06
в методе data( ) модели возвращать нужный элемент base_points, в методе setData соответственно его устанавливать...


Название: Re: Помогите разобраться с QAbstractItemModel и QAbstractItemView
Отправлено: m.lyakishev от Ноябрь 12, 2010, 13:28
2 crossly:

Т.е. все-таки использовать модель для хранения данных, занося их при помощи setData() в модель, а потом менять значения данных структуры, заменяя их на
значения из модели методом data() ?

Просто Пантер говорит о прямом обращении модели к данным и их отображении, как я понял.
Хотелось бы сделать что-то подобное.


Название: Re: Помогите разобраться с QAbstractItemModel и QAbstractItemView
Отправлено: crossly от Ноябрь 12, 2010, 14:05
Код:
QVariant Model::data( const QModelIndex & index, int role)
{
........
     return base_points[index.row()][index.column()];
.........
}
...........
void Model::setData ( const QModelIndex & index, const QVariant & value, int role)
{
........
    base_points[index.row()][index.column()]=value.toInt();
.........
}
примерно.... но смысл должен быть понятен... посмотри исходники QStringListModel.... это в принципе то что тебе нужно только заменить stringlist на на твой массив


Название: Re: Помогите разобраться с QAbstractItemModel и QAbstractItemView
Отправлено: m.lyakishev от Ноябрь 13, 2010, 02:18
Спасибо, разобрался, как нормально все организовать.