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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: QModelIndex указывает куда-то не туда...  (Прочитано 20888 раз)
Dendy
Гость
« Ответ #15 : Январь 07, 2009, 22:11 »

1. Вы так и не обрамили изменения структуры данных в пару вызовов layoutAboutToBeChanged();layoutChanged(); - оно у вас осталось в методе current->move_up().
2. QModelIndex - статический обьект с временными данными, валидный только за пределами модели только в пределах текущего стека, в котором этот QModelIndex получен. Когда он подставляется обратно в модель - по хорошему должен быть логически разбит обратно на row, column, parent. Если же он выходит за пределы модели - он должен быть пересобран.
3. Ошибка в том, что в области видимости уже есть переменная с именем index. Делайте: this->index( ... );
Записан
Dendy
Гость
« Ответ #16 : Январь 07, 2009, 22:16 »

Совет. Откройте Ассистент и прочитайте всю документацию по методам Model/View/Index/PersistentIndex. Если останутся неясности, сомнения что к чему и как работает - открываете исходники и читаете код. Можно перед зеркалом с интонацией. Мне помогает.
Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #17 : Январь 07, 2009, 22:19 »

Фух, наконец заработало какнада.

Цитировать
Ошибка в том, что в области видимости уже есть переменная с именем index. Делайте: this->index( ... );

никогда бы до этого недодумался!


"QModelIndex - статический обьект с временными данными, валидный только за пределами модели только в пределах текущего стека, в котором этот QModelIndex получен", чота я завис на этой фразе... Надо поспать.
Записан

Собираю информацию по крупицам
http://webhamster.ru
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #18 : Январь 07, 2009, 22:24 »

Совет. Откройте Ассистент и прочитайте всю документацию по методам Model/View/Index/PersistentIndex.

Не, вы один пункт упустили. Правильно будет так - "Выучите английский язык. Откройте Ассистент и прочитайте всю документацию по методам Model/View/Index/PersistentIndex."
Записан

Собираю информацию по крупицам
http://webhamster.ru
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #19 : Январь 08, 2009, 14:42 »

А у меня вопрос к гуру.

Если закрыть глаза на весь код, который был в этой ветке, и сделать все "с нуля", то какую бы реализацию перемещения ветки вверх-вниз (без выхода за границы уровня вложенности) вы бы использовали, если в основу взять пример /qtdemo/examples/itemviews/editabletreemodel ?
Записан

Собираю информацию по крупицам
http://webhamster.ru
Dendy
Гость
« Ответ #20 : Январь 08, 2009, 15:52 »

Всё у вас там нормально. Кроме того что проверка на то может ли Item переместиться вверх/вниз находится в самом Item'е. Замените возвращаемый bool на void, в проверки - на ассерты. Саму проверку вынесите наружу.
Записан
ритт
Гость
« Ответ #21 : Январь 08, 2009, 23:38 »

а я бы на сортфильтерпроксимодели сделал бы минут за десять Улыбающийся
Записан
vaprele07
Гость
« Ответ #22 : Январь 09, 2009, 06:03 »

на примере: /qtdemo/examples/itemviews/editabletreemodel.

Код:
void TreeModel::swap(const QModelIndex &parent, int i, int j)
{
  TreeItem *rootItem = getItem(parent);
  rootItem->swap(i, j); // childItems.swap(i, j);

  QModelIndex ix = createIndex(i, 0, rootItem->child(i));
  QModelIndex jx = createIndex(j, 0, rootItem->child(j));

  dataChanged(ix, ix);
  dataChanged(jx, jx);
}
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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