Russian Qt Forum

Qt => Model-View (MV) => Тема начата: mozgofil от Июнь 23, 2009, 20:36



Название: Модель дерева: зачем переопределять методы....
Отправлено: mozgofil от Июнь 23, 2009, 20:36
insertColumns,insertRows,removeColumns,removeRows 
и что будет, если их не переопределить(потому что вроде и так всё работает)?


Название: Re: Модель дерева: зачем переопределять методы....
Отправлено: Karl-Philipp от Июнь 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. Попробуй не переопределить указанные тобой методы :)


Название: Re: Модель дерева: зачем переопределять методы....
Отправлено: mozgofil от Июнь 23, 2009, 21:35
В примере этими методами происходит соответственно вставка и удаление в дерево ч/з объект модели.
А если мне нужно сделать вставку и удаление не используя модель(т.е. модель -оболочка над данными и данные о модели ничего не знают о модели, модифицируются не через модель)?


Название: Re: Модель дерева: зачем переопределять методы....
Отправлено: Авварон от Июнь 23, 2009, 21:43
я кстати так ничего путного и не придумал... вообще по идее данные долны сообщать сигналом о добавлении\изъятии данных (ну или обновляться по таймеру) так что решение хотелось бы узнать


Название: Re: Модель дерева: зачем переопределять методы....
Отправлено: Rcus от Июнь 23, 2009, 22:03
А в чем проблема в коде, который обновляет данные не зная о модели определить сигналы для оповещения об изменении данных?


Название: Re: Модель дерева: зачем переопределять методы....
Отправлено: Karl-Philipp от Июнь 23, 2009, 22:17
В примере этими методами происходит соответственно вставка и удаление в дерево ч/з объект модели.
А если мне нужно сделать вставку и удаление не используя модель(т.е. модель -оболочка над данными и данные о модели ничего не знают о модели, модифицируются не через модель)?
Дык, в дерево, ж, ничего не вставляется. Дерево служит только для отображения данных модели.

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

Вставка/удаление должны проводиться в самой модели, а все изменения показываются с помощью того или иного Q...View.


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


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

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

чтобы не возиться отдельно с insert, remove. Данные у меня в программе - не совсем дерево и структура данных будет меняться => взаимодействие данных с интерфейсом требуется максимально упростить


Название: Re: Модель дерева: зачем переопределять методы....
Отправлено: mozgofil от Июнь 23, 2009, 22:37
А в чем проблема в коде, который обновляет данные не зная о модели определить сигналы для оповещения об изменении данных?
Вобщем, нужно чтобы по сигналу обновилось всё что ниже определённого итема или хотя бы
просто полностью обновилось.


Название: Re: Модель дерева: зачем переопределять методы....
Отправлено: Rcus от Июнь 23, 2009, 23:41
Эээ... и? Нужно - делайте, ага :)


Название: Re: Модель дерева: зачем переопределять методы....
Отправлено: Авварон от Июнь 24, 2009, 11:43
некрасиво! при посылке сигнала beginInsertRows и Remove вызываются после фактического добавления \удаления данных, что нехорошо (в случае ремува особенно). Оно вроде и работает, но косячит удаление (возможно вставка перед\после) выделенной строки. К примеру если строка последняя, то после удаления ее выделение должно остаться на ней, а оно сползает на предпоследнюю (бывшую предпредпоследнюю) и там и остается...
added: потестил на чистом примере, сейчас вроде без глюков работает... странно


Название: Re: Модель дерева: зачем переопределять методы....
Отправлено: mozgofil от Июнь 24, 2009, 18:42
Эээ... и? Нужно - делайте, ага :)
Полное обновление делаю методом reset();
А как сделать блокировку модели, чтобы модель бездействовала пока данные модифицируются? ???


Название: Re: Модель дерева: зачем переопределять методы....
Отправлено: mozgofil от Июнь 24, 2009, 18:52
некрасиво! при посылке сигнала beginInsertRows и Remove вызываются после фактического добавления \удаления данных, что нехорошо (в случае ремува особенно).
- сделать так, чтобы они вызывались вовремя -это уже ваша задача. Нельзя сигналами злоупотреблять.

->signal->[ beginInsertRow() , модификация данных, endInsertRow()]


Название: Re: Модель дерева: зачем переопределять методы....
Отправлено: Авварон от Июнь 24, 2009, 19:21
написал же что все нормально работает при вставка, beginInsertRow(), endInsertRow()


Название: Re: Модель дерева: зачем переопределять методы....
Отправлено: mozgofil от Июнь 24, 2009, 19:27
написал же что все нормально работает при вставка, beginInsertRow(), endInsertRow()
... странно (c) :)