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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Модель дерева: зачем переопределять методы....  (Прочитано 8371 раз)
mozgofil
Гость
« : Июнь 23, 2009, 20:36 »

insertColumns,insertRows,removeColumns,removeRows 
и что будет, если их не переопределить(потому что вроде и так всё работает)?
Записан
Karl-Philipp
Гость
« Ответ #1 : Июнь 23, 2009, 20:46 »

Цитировать
If you implement your own model, you can reimplement this function if you want to support insertions. Alternatively, you can provide you own API for altering the data.

То есть для моделей-наследников от QAbstractItemModel.
Для полного понимания глянь пример editabletreemodel. Попробуй не переопределить указанные тобой методы Улыбающийся
Записан
mozgofil
Гость
« Ответ #2 : Июнь 23, 2009, 21:35 »

В примере этими методами происходит соответственно вставка и удаление в дерево ч/з объект модели.
А если мне нужно сделать вставку и удаление не используя модель(т.е. модель -оболочка над данными и данные о модели ничего не знают о модели, модифицируются не через модель)?
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #3 : Июнь 23, 2009, 21:43 »

я кстати так ничего путного и не придумал... вообще по идее данные долны сообщать сигналом о добавлении\изъятии данных (ну или обновляться по таймеру) так что решение хотелось бы узнать
Записан
Rcus
Гость
« Ответ #4 : Июнь 23, 2009, 22:03 »

А в чем проблема в коде, который обновляет данные не зная о модели определить сигналы для оповещения об изменении данных?
Записан
Karl-Philipp
Гость
« Ответ #5 : Июнь 23, 2009, 22:17 »

В примере этими методами происходит соответственно вставка и удаление в дерево ч/з объект модели.
А если мне нужно сделать вставку и удаление не используя модель(т.е. модель -оболочка над данными и данные о модели ничего не знают о модели, модифицируются не через модель)?
Дык, в дерево, ж, ничего не вставляется. Дерево служит только для отображения данных модели.

Цитата: Assistant
QTreeView shows model items of data in a hierarchical list.   

Вставка/удаление должны проводиться в самой модели, а все изменения показываются с помощью того или иного Q...View.
Записан
mozgofil
Гость
« Ответ #6 : Июнь 23, 2009, 22:33 »

В примере этими методами происходит соответственно вставка и удаление в дерево ч/з объект модели.
А если мне нужно сделать вставку и удаление не используя модель(т.е. модель -оболочка над данными и данные о модели ничего не знают о модели, модифицируются не через модель)?
Дык, в дерево, ж, ничего не вставляется. Дерево служит только для отображения данных модели.
В примере в дерево всё-таки вставляется новый элемент (TreeItem::insertChildren), т.е. данные модифицируются. причём опосредованно, ч/з модель


Цитата: Assistant
QTreeView shows model items of data in a hierarchical list.   
Вставка/удаление должны проводиться в самой модели, а все изменения показываются с помощью того или иного Q...View.
это в идеале.
Мне бы хотелось сделать по схеме:

[какая-либо модификация данных]->signal->[обновление дерева]

чтобы не возиться отдельно с insert, remove. Данные у меня в программе - не совсем дерево и структура данных будет меняться => взаимодействие данных с интерфейсом требуется максимально упростить
Записан
mozgofil
Гость
« Ответ #7 : Июнь 23, 2009, 22:37 »

А в чем проблема в коде, который обновляет данные не зная о модели определить сигналы для оповещения об изменении данных?
Вобщем, нужно чтобы по сигналу обновилось всё что ниже определённого итема или хотя бы
просто полностью обновилось.
Записан
Rcus
Гость
« Ответ #8 : Июнь 23, 2009, 23:41 »

Эээ... и? Нужно - делайте, ага Улыбающийся
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #9 : Июнь 24, 2009, 11:43 »

некрасиво! при посылке сигнала beginInsertRows и Remove вызываются после фактического добавления \удаления данных, что нехорошо (в случае ремува особенно). Оно вроде и работает, но косячит удаление (возможно вставка перед\после) выделенной строки. К примеру если строка последняя, то после удаления ее выделение должно остаться на ней, а оно сползает на предпоследнюю (бывшую предпредпоследнюю) и там и остается...
added: потестил на чистом примере, сейчас вроде без глюков работает... странно
« Последнее редактирование: Июнь 24, 2009, 11:52 от Авварон » Записан
mozgofil
Гость
« Ответ #10 : Июнь 24, 2009, 18:42 »

Эээ... и? Нужно - делайте, ага Улыбающийся
Полное обновление делаю методом reset();
А как сделать блокировку модели, чтобы модель бездействовала пока данные модифицируются? Непонимающий
Записан
mozgofil
Гость
« Ответ #11 : Июнь 24, 2009, 18:52 »

некрасиво! при посылке сигнала beginInsertRows и Remove вызываются после фактического добавления \удаления данных, что нехорошо (в случае ремува особенно).
- сделать так, чтобы они вызывались вовремя -это уже ваша задача. Нельзя сигналами злоупотреблять.

->signal->[ beginInsertRow() , модификация данных, endInsertRow()]
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #12 : Июнь 24, 2009, 19:21 »

написал же что все нормально работает при вставка, beginInsertRow(), endInsertRow()
Записан
mozgofil
Гость
« Ответ #13 : Июнь 24, 2009, 19:27 »

написал же что все нормально работает при вставка, beginInsertRow(), endInsertRow()
... странно (c) Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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