Russian Qt Forum
Ноябрь 24, 2024, 05:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите разобраться с QAbstractItemModel и QAbstractItemView  (Прочитано 4436 раз)
m.lyakishev
Гость
« : Ноябрь 10, 2010, 17:18 »

Всем доброго времени суток!

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

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

Всем, кто ответит что-нибудь дельное по этим, думаю, простым вопросам, заранее большое спасибо!
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Ноябрь 10, 2010, 17:21 »

QAbstractItemModel используется не для отображения, а для хранения данных. Не нужно через setData вносить данные, модель сама должна обращаться к структурам и выдавать данные.
А по отображению в твоем случае помочь не могу.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
m.lyakishev
Гость
« Ответ #2 : Ноябрь 11, 2010, 15:47 »

Спасибо за ответ.

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

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

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

Если хочется видеть через QTreeView, например, точки base_points[][] и иметь возможность их изменять, как в данном случае указать модели на эти точки?
Записан
crossly
Гость
« Ответ #3 : Ноябрь 11, 2010, 16:06 »

в методе data( ) модели возвращать нужный элемент base_points, в методе setData соответственно его устанавливать...
Записан
m.lyakishev
Гость
« Ответ #4 : Ноябрь 12, 2010, 13:28 »

2 crossly:

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

Просто Пантер говорит о прямом обращении модели к данным и их отображении, как я понял.
Хотелось бы сделать что-то подобное.
Записан
crossly
Гость
« Ответ #5 : Ноябрь 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 на на твой массив
Записан
m.lyakishev
Гость
« Ответ #6 : Ноябрь 13, 2010, 02:18 »

Спасибо, разобрался, как нормально все организовать.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.054 секунд. Запросов: 23.