Re[3]: TableView: сигнал об окончании редактирования
От: SaZ  
Дата: 23.06.20 16:54
Оценка:
Здравствуйте, dimka, Вы писали:

D>Здравствуйте, SaZ, Вы писали:


SaZ>>Делайте свой делегат, переопределив один метод:

SaZ>>http://doc.qt.io/qt-5/qitemdelegate.html#setModelData
SaZ>>
SaZ>>void MyItemDelegate::setModelData(QWidget * editor, QAbstractItemModel * model, const QModelIndex & index) const
SaZ>>{
SaZ>>  emit MyMegaSignal( index );
SaZ>>  return QItemDelegate::setModelData(QWidget * editor, QAbstractItemModel * model, const QModelIndex & index);
SaZ>>}
SaZ>>

SaZ>>З.Ы. Igore
Автор: Igore
Дата: 01.02.16
более общий случай написал. Мой пример подходит именно для тех случаев, когда нужно кидать сигнал только при пользовательском вводе. Если данные менять программно, то у меня сигнал не кинется.


D>Некропостинг, да Но по теме. Сейчас разбираюсь с этой ша(р)манкой. И у меня вопрос. Что вы подразумеваете под программным изменением данных?


D>В моей программе данные это список, элементами которого являются структуры. tableView отображает через модель эти данные в виде таблицы, каждая строка — элемент списка. И реализован делегат, как вы рекомендовали.


D>Если я чисто программно добавляю элемент к списку между вызовами beginReset() endReset() для модели, то изменение данных в отображении происходит корректно, но ни setModelData() в делегате, ни setData() в модели не вызываются.

D>А если редактирую вручную данные в tableView, то вызываются и setModelData() в делегате, и setData() в модели.

D>Т.е. у меня получается, что и ваш вариант, и вариант Igore
Автор: Igore
Дата: 01.02.16
равносильны? (при условии, что имеем одно окошко tableView, один экземпляр делегата и один экземпляр модели)


Мне непонятен ваш вопрос. Если вы обновляете целиком модель — то begin/end reset достаточно. Если вы точечно обновляете определённые элементы в какой-то одной позиции, то тогда уже через setData, которые должы дёргать уже emit dataChanged.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.