QComboBox делегат

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

Делегат реализует режим обычного отображения и режим редактирования (имеется ввиду например выбор из списка) .

Режим отображения это просто переопределенный метод paint, который получает из модели данных таблицы числовые значения (через data, flags), заменяет их текстовыми соответствиями и соответсвенно отрисовывает.

Для режима редактирования каждый раз создается заново виджет, (например выпадающий список) при входе в режим редактирования.

При выходе уничтожается.

Методы data и flags для колонки делегата тут уже не вызываются из модели данных таблицы.

фотка 1

Делегат предназначен для подмены числовых значений более информативными визуальными представлениями на основе QWidget в режиме просто отображения.

paint

Отрисовка каждой ячейки происходит через метод paint, который использует разные draw вариации для разных типов контролов.

Но вот кто вызывает методы paint для ячеек - это события , которые приходят от ОС, нажатия мышки, перемещения мышки т.д.

Для режима визуального отображения при просмотре строки таблицы делегат может переопределить метод отрисовки paint просто на свой вариант.

В противном случае отображение будет происходить стандартно через запросы функций модели таблицы: data, flags и т.д.

Существует проблема с отрисовкой фона делегата при выделении строки в таблице, которую можно решить как описано здесь: Когда надо изменять QPalette.

Скачать наше развитие модель-представление библиотеки Qt, где все это уже реализовано, можно здесь скачать sql развитие модель-представление.