QT Як розфарбувати рядки QListView

qlistview

Всім доброго часу доби! Мені потрібно зафарбувати фон деяких рядків у QListView певним кольором. Поділіться досвідом, хто робив таке?

PS. Відображувані дані знаходяться під керуванням моделі заснованої на QAbstractListItem, може в цьому напрямку потрібно копати?

моделі

qlistview

рядки

Спробуй використовувати QItemDelegate, перевизнач методvoid QItemDelegate::paint ( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const [virtual]

Можна глянутиQtприкладQt Examples SpinBox Delegate

qlistview

моделі

поки що не було завдань з реалізації свого делегата, але дотримуючись логіки:

1. метод paint викликається всім видимих ​​item'ов 2. викликається метод paint тоді, коли необхідно показати item'и + примусово

якщо тільки так, то що заважає заюзати QTableWidget? Наповнюємо його QTableWidgetItem і за яких хочете умов у item'а змінюєте фон

розфарбувати

моделі

якщо тільки так, то що заважає заюзати QTableWidget?

Наповнюємо його QTableWidgetItem і за яких хочете умов у item'а змінюєте фон

розфарбувати

не знав би я про те, що можна заюзати "MVC" то зробив би так

qlistview

Відображувані дані знаходяться під керуванням моделі заснованої на QAbstractListItem, чи може в цьому напрямку потрібно копати?

У цій моделі, у методі

рядки

Навіщо все так ускладнювати?

Наведене мною рішення дозволяє у два рядки вирішити це завдання.

розфарбувати

розфарбувати

Для тих, що не треба підсвічувати повертати порожній QVariant()

Та ні.. як мені в методі дата дізнатися треба підсвічувати чи не треба заздалегідь? Де мені зберегтиоб'єкт перетягується, щоб дослідити його на предмет того, чи підсвічувати певний рядок чи ні?

qlistview

моделі

А навіщо заздалегідь? У момент початку перетягування розрахуйте що і як підсвічувати (або передайте моделі, що перетягуєте, щоб прямо в data рахувати), можна в моделі метод створити наDragHighlight, і зробіть з моделі emit dataChanged або layoutChanged.

У момент початку перетягування це і є наперед

Зробив спеціальний сигнал, але не можу його викликати у методі, який викликається в момент початку перетягування:

З константного методу не можна сигнал емітити?

))))