Russian Qt Forum

Qt => Model-View (MV) => Тема начата: joffadark от Март 24, 2016, 15:43



Название: QTableView и обновление данных
Отправлено: joffadark от Март 24, 2016, 15:43
Здравствуйте, уважаемые форумчане.

Реализовал наследника QAbstractTableModel, который подключается к QTableView, соответственно.
Наследник предоставляет данные в отображение напрямую из "физической" модели (ну, скажем, это вектор чисел).
 
Задача вот в чем : вектор этих данных может быть изменен вне модели (туда могут быть добавлены или удалены элементы). Но прямое изменение данных в векторе не проявляется в отображении. Соответственно, необходимо оповещать каким-то образом QTableView, что был изменен rowCount в модели )

Подскажите пожалуйста, как можно оповестить QTableView об изменении количества элементов в модели?


Название: Re: QTableView и обновление данных
Отправлено: gil9red от Март 24, 2016, 16:10
В модели посылать сигнал void QAbstractItemModel::dataChanged ( const QModelIndex & topLeft, const QModelIndex & bottomRight ) [signal]


Название: Re: QTableView и обновление данных
Отправлено: joffadark от Март 24, 2016, 20:51
В модели посылать сигнал void QAbstractItemModel::dataChanged ( const QModelIndex & topLeft, const QModelIndex & bottomRight ) [signal]

Спасибо за ответ! Попробую.
Хочу спросить : если использовать для отображения прокси-модель, а сигнал посылать из модели-источника этой прокси модели, сработает ли цепочка, обновится ли отображение?


Название: Re: QTableView и обновление данных
Отправлено: gil9red от Март 24, 2016, 21:32
В модели посылать сигнал void QAbstractItemModel::dataChanged ( const QModelIndex & topLeft, const QModelIndex & bottomRight ) [signal]

Спасибо за ответ! Попробую.
Хочу спросить : если использовать для отображения прокси-модель, а сигнал посылать из модели-источника этой прокси модели, сработает ли цепочка, обновится ли отображение?

Думаю, да


Название: Re: QTableView и обновление данных
Отправлено: joffadark от Март 24, 2016, 23:25
emit dataChanged(...), к сожалению, не помог.

Добавление и удаление элементов из-вне завернул в отдельные публичные методы наследника модели.
В этих методах, изменение "физической" модели обернул в beginInsertRows / endInsertRows  и beginRemoveRows / endRemoveRows, соответственно.

Теперь отображение корректно обновляется.


Название: Re: QTableView и обновление данных
Отправлено: Bepec от Март 25, 2016, 00:07
Некорректно поставлен вопрос.
Изменение - dataChanged.
Добавление - beginInserted.
Удаление - beginRemove.