Я реализую свою третью "наивную" модель как наследующий класс QAbstractItemModel.
Пока все работает хорошо.
Однако в своих представлениях я использовал «статические» модели, доступные только для чтения, и менял модель некоторых представлений только в зависимости от действий пользователя. Поэтому я использовал my_view->setModel( a_model );
для обновления представления.
Теперь мне нужно иметь одно из представлений, чтобы сохранить уникальную модель, но эту модель нужно иногда обновлять, используя специальную функцию «update ()», которую я вызываю в коде, когда это необходимо.
В конце функции update () я просто вызываю emit dataChanged( ... );
с соответствующими данными.
Кажется, он не обновляет представление, к которому подключена эта модель. Кажется, что единственный способ сделать обновление представления - это сделать что-то вроде my_view->setModel( nullptr );
, а затем my_view->setModel( a_model );
.
Каковы возможные причины для emit dataChanged( ... );
не запускать обновление отображения представления?
Я отлаживал свои функции реализации модели и вызывал функцию index (), но не data (). Я немного обеспокоен тем, что, возможно, я что-то не понял в системе модель / представление в случае изменения модели (это изменяется не через представление, а программно).
Это проект с открытым исходным кодом, так что вы можете проверить полный код модели (я думаю, это немного странно, не используется для моделирования / просмотра системы Qt): http://code.google.com/p/art-of-sequence/source/browse/tools/aosdesigner/view/model/LayerObjectsModel.cpp?spec=svn4fe209aa3e82f2c7cd42192581a890e28bada9b0&r=4fe209aa3e82f2c7cd42192581a890e28bada9b0
Код виджета, управляющего представлением, доступен там: http://code.google.com/p/art-of-sequence/source/browse/tools/aosdesigner/view/LayersView.cpp?spec=svn4fe209aa3e82f2c7cd42192581a890e28bada9b0&r=4fe209aa3e82f2c7cd42192581a890e28bada9b0