Russian Qt Forum

Qt => Model-View (MV) => Тема начата: Waryable от Ноябрь 28, 2008, 12:18



Название: Работа с индексами в модели QStandardItemModel
Отправлено: Waryable от Ноябрь 28, 2008, 12:18
Имеется:
Код
C++ (Qt)
QModelIndex index;
QStandardItemModel *model = new QStandardItemModel;
for ( int nRow = 0; nRow < 3; ++nRow )
{
index = model -> index( nRow, 0 );
model -> setData(index, str );
}
Проблема в том, что метод model -> index( nRow, 0 ); не возвращает валидный индекс. Конкретнее, при любых значениях аргументов индекс указывает на -1 строку и -1 столбец, указатель р всегда равен нулю. 
Примеров работы с индексами в ассистенте не нашел(возможно плохо искал). В учебниках примеры есть, но почему-то проблема та же - индексы получаю не валидные.


Название: Re: Работа с индексами в модели QStandardItemModel
Отправлено: Пантер от Ноябрь 28, 2008, 12:34
Для получения индекса нужно, чтобы были данные. А ты делаешь все наоборот. Читай про заполнение модели в ассистенте.


Название: Re: Работа с индексами в модели QStandardItemModel
Отправлено: Waryable от Ноябрь 28, 2008, 12:50
В том то и дело, что мне надо заполнить модель.
Код
C++ (Qt)
model -> index( nRow, 0 );
Поидее методу надо задать еще третий аргумент - указатель на предка. Для создания первого элемента модели, поидее, надо вызвать этот матод таким образом:
Код
C++ (Qt)
model -> index( nRow, 0, &parent ).
Проблема в том, что не смог найти как получить parent.


Название: Re: Работа с индексами в модели QStandardItemModel
Отправлено: Karl-Philipp от Ноябрь 28, 2008, 13:31
Имеется:
Код
C++ (Qt)
QModelIndex index;
QStandardItemModel *model = new QStandardItemModel;
for ( int nRow = 0; nRow < 3; ++nRow )
{
index = model -> index( nRow, 0 );
model -> setData(index, str );
}
Проблема в том, что метод model -> index( nRow, 0 ); не возвращает валидный индекс...

ты создал модель, но ты же не указал, сколько в ней строк и колонок (не заполнил её айтемами)! Откуда модель возьмёт требуемый тебе индекс  ???

Сперва либо создай айтемы и помести их в модель, либо сразу создавай модель с требуемым числом строк и колонок:
Цитировать
QStandardItemModel ( int rows, int columns, QObject * parent = 0 )

Глянь ассистант про QStandardItemModel, там очень хорошо видно :)

P.S. В твоём случае parent при заполнении не при чём.


Название: Re: Работа с индексами в модели QStandardItemModel
Отправлено: Waryable от Декабрь 01, 2008, 10:23
Приветствую. Спасибо за ответы. С предками разобрался. Но сколько не курил асистент и другие учебники, так и не понял, как решить мою задачу.
Создана модель дерева QStandardItemModel. В ней созданы три корневых итема. Задача реализовать возможность добавления отдельных итемов к каждому из корневых итемов.
Все было бы просто, если б добавление можно было производить таким образом: model.insertItem(index, item); , где index - индекс корневого итема, item - добавляемый итем. Но, к сожалению, это только лишь мои мечты  :D


Название: Re: Работа с индексами в модели QStandardItemModel
Отправлено: Karl-Philipp от Декабрь 01, 2008, 11:04
...
Создана модель дерева QStandardItemModel. В ней созданы три корневых итема. Задача реализовать возможность добавления отдельных итемов к каждому из корневых итемов.
...
данная возможность уже реализована!
приблизительно будет выглядеть так:
Код:
...
QModelIndex index;
QStandardItemModel* model = new QStandardItemModel(3, 1);

index = model->index(i, 0); //выбираешь нужный ряд в модели (корневой айтем)
model->itemFromIndex(index)->appendRow( new QStandardItem() );//прикрепляешь новый айтем
...


Название: Re: Работа с индексами в модели QStandardItemModel
Отправлено: Waryable от Декабрь 01, 2008, 11:21
 
Код
C++ (Qt)
QModelIndex index;
QStandardItemModel* model = new QStandardItemModel(3, 1);
 
index = model->index(i, 0); //выбираешь нужный ряд в модели (корневой айтем)
model->itemFromIndex(index)->appendRow( new QStandardItem() );//прикрепляешь новый айтем
Господа, ну что у вас за привычка, я только найду решение, иду отписываться, а тут вы уже его запостили!!!  :D Шутка  ;) Точно такое решение я уже реализовал. Спасибо terlan.


Название: Re: Работа с индексами в модели QStandardItemModel
Отправлено: ритт от Декабрь 01, 2008, 15:26
в следующий раз попробуй искать решение _до_ того, как постишь здесь.


Название: Re: Работа с индексами в модели QStandardItemModel
Отправлено: Waryable от Декабрь 02, 2008, 09:34
в следующий раз попробуй искать решение _до_ того, как постишь здесь.
Странное заявление. Пока решение не найдено, неизвестно сколько уйдет времени на его поиск. В то время как, можно отписать свою проблему здесь, что дает большую вероятность того, что решение будет найдено быстрее. Так в чем проблема то?


Название: Re: Работа с индексами в модели QStandardItemModel
Отправлено: ритт от Декабрь 02, 2008, 11:31
тратишь чужое время, а стОит шевельнуть мозгой - и сам решение находишь.


Название: Re: Работа с индексами в модели QStandardItemModel
Отправлено: Waryable от Декабрь 02, 2008, 12:18
Стало еще более странно. Здесь все в конечном счете тратят чужое время. Я потому и задаю вопрос в теме для новичков, что на Qt только начинаю программировать. Вопросы выглядят тривиальными для тех, кто уже на "ты" со средой. Я еще не дотянул до такого уровня. Мозгой я шевелил и когда вопрос задавал, и после этого. Когда сам нашел решение, отписал здесь. Поблагодарил всех, и немного отшутился. А вашы посты немного здесь не в тему.
ЗЫ: начался флуд...