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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО]когда пускать QAbstractItemModel::dataChanged(...), мониторинг изменений  (Прочитано 6617 раз)
unkeep
Гость
« : Сентябрь 20, 2013, 11:49 »

при редактировании понятно. указать два индекса topLeft и bottomRight, между которыми ячейки поменялись.
а как с вставкой и удалением? тут сомневаюсь

  • abc1
    • abc1.1
    • abc1.2
    • abc1.3
  • abc2

какие индексы передавать сигналу при удалении/вставке 1.2
нужно ли вообще сигнал возбуждать в этих случаях, или только в SetData?

Цитировать
void QAbstractItemModel::dataChanged ( const QModelIndex & topLeft, const QModelIndex & bottomRight ) [signal]
This signal is emitted whenever the data in an existing item changes.

If the items are of the same parent, the affected ones are those between topLeft and bottomRight inclusive. If the items do not have the same parent, the behavior is undefined.

When reimplementing the setData() function, this signal must be emitted explicitly.
« Последнее редактирование: Сентябрь 20, 2013, 12:27 от unkeep » Записан
mutineer
Гость
« Ответ #1 : Сентябрь 20, 2013, 12:03 »

Для вставки есть beginInsertRows/endInsertRows
Для удаления beginRemoveRows/endRemoveRows
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #2 : Сентябрь 20, 2013, 12:06 »

этот сигнал испускается когда внутреннее содержимое айтема меняется, к вставке/удалению отношения не имеет. тебе нужны begin*Rows() и begin*Columns().
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
unkeep
Гость
« Ответ #3 : Сентябрь 20, 2013, 12:11 »

cпасибо, а есть ли какой-либо сигнал который извещает о том что данные в модели изменились, будь тот редактирование, удаление или вставка?
Записан
Bepec
Гость
« Ответ #4 : Сентябрь 20, 2013, 12:16 »

Всё по отдельности.
Записан
unkeep
Гость
« Ответ #5 : Сентябрь 20, 2013, 12:33 »

Всё по отдельности.
rowsInserted, rowsRemoved - private . Свой сигнал сделать?
Записан
mutineer
Гость
« Ответ #6 : Сентябрь 20, 2013, 12:37 »

квалификатор доступа не влияет на возможность привязаться к сигналу
Записан
Bepec
Гость
« Ответ #7 : Сентябрь 20, 2013, 12:48 »

connect - это когда указанный Object  привязывает свой же слот/сигнал. Для него все методы доступны.
Записан
unkeep
Гость
« Ответ #8 : Сентябрь 20, 2013, 13:36 »

я в своей модели, унаследованной от QAbstractItemModel, где
Код
C++ (Qt)
private: // can only be emitted by QAbstractItemModel
   void rowsInserted(const QModelIndex &parent, int first, int last);
 

не могу услышать этот сигнал, он не  распространяется на потомков, я так понимаю...
Пишу коннект в конструкторе своей модели. Sender - this, member - this. Или как-то через  родительский класс надо?

ПОДПИСАЛСЯ. не смотря на то,  что в "конструкторе кода" сигнала не было. Ручками написал и заработало)
« Последнее редактирование: Сентябрь 20, 2013, 14:33 от unkeep » Записан
mutineer
Гость
« Ответ #9 : Сентябрь 20, 2013, 14:47 »

не могу услышать этот сигнал, он не  распространяется на потомков, я так понимаю...
Пишу коннект в конструкторе своей модели. Sender - this, member - this. Или как-то через  родительский класс надо?

ПОДПИСАЛСЯ. не смотря на то,  что в "конструкторе кода" сигнала не было. Ручками написал и заработало)

Вообще не понял что имелось в виду
Записан
unkeep
Гость
« Ответ #10 : Сентябрь 26, 2013, 10:24 »



Вообще не понял что имелось в виду
[/quote]

получилось в итоге. просто смутило то, что когда коннектишь сигналы, которые описаны в родителях, их нет в подсказке по  "ctrl+space". Есть только те, что в конечном классе.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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