Принимает отредактированные исходные данные с помощью QDataWidgetMapper

#qt

#qt

Вопрос:

Я создаю небольшое приложение, представляющее список дел. Список хранится в модели cusom (производной от QAbstractItemModel) и отображается в QTableView.

У меня также есть пользовательский виджет (TaskDialog), который используется для просмотра и редактирования задач из списка. Дочерние элементы TaskDialog отображаются в модель с помощью QDataWidgetMMapper. В диалоговом окне задачи у меня также есть кнопки, которые позволяют просматривать все задачи в моем списке дел (QDataWidgetMapper::toPrevious() …).

Проблема в том, что если я редактирую задачу в TaskDialog (например, имя задачи), а затем перехожу к другой задаче, новый отредактированный объект не задается в модели. Но если я что-то редактирую в TaskDialog, то сначала переключаю фокус на другой дочерний виджет TaskDialog, а затем нажимаю одну из кнопок просмотра, после чего изменения записываются в модель.

Как я могу добиться того, чтобы виджеты, находящиеся в режиме редактирования, принимались и записывались в модель.

Я также попробовал пример QDataWidgetMapper от Nokia. Там это работает отлично. Но они используют QStandardItemModel.

С наилучшими пожеланиями, Люк

Ответ №1:

Я нашел решение: для политики отправки QDataWidgetMapper должно быть установлено значение QDataWidgetMapper::manuals submit. Затем всегда, когда я перехожу к новому элементу (т. Е. Нажата одна из кнопок просмотра), я отправляю изменения с помощью QDataWidgetMapper::submit() .