Да, вы должны.
Наиболее фундаментальная причина использования ролей: Это способ написания моделей Qt.
Хорошо, эта причина ничего особенного не имеет, если только нет вещей, которые ожидают, что вы сделаете это Qt ...
Итак, есть причины, по которым вам следует реализовывать роли, но это не значит, что вы должны использовать их в QML - и в зависимости от того, что вы планируете делать с вашей моделью , это будет ненужным .
На мой взгляд, самая важная причина в том, что вы должны реализовать этот dataChanged
-сигнал. Если вы этого не сделаете, ваша модель будет стоить столько же, сколько и QVariantList
.
Изменения свойств вашего объекта будут отражены только в сгенерированных делегатах, но объекты, использующие dataChanged
-сигнал, не будут получать обновления - если только вы не активируете его для роли-объекта, когда-либо свойство этого объекта изменилось.
Это, с другой стороны, окажет большое влияние на делегатов, так как все привязки должны быть переоценены.
Возьмем, к примеру, QSortFilterProxyModel
- если у вас нет сигнала dataChanged
, он не будет обновлять фильтр или сортировку, если значение было изменено, так как он прослушивает dataChanged
-сигнал за это.
Ad hoc, я не знаю других случаев, которые бы использовали это из библиотек Qt, но могут быть и другие.
Однако, если вы не собираетесь использовать ни один из них - вам не нужно запускать сигнал dataChanged
.
Должны ли вы действительно выполнять роли для этого, я не знаю. Я не пытался реализовать сигнал dataChanged
без ролей.
Код QSortFilterProxyModel, который использует dataChanged
-сигнал
Вам не нужно
Когда вы либо не используете ничего, что основано на должным образом реализованных ролях, или вы переопределяете ту функциональность, которая будет зависеть от ролей, которые вы сами.