QComboBox делегат

Надо понимать, что делегат комбобокса это наш рукотворный отдельный виджет. 

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

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

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

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

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

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

фотка 1

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

paint

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

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

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

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

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

Вы также можете скачать наше развитие модель-представления библиотеки Qt, чтобы получить новые возможности работы с таблицами  скачать sql развитие модель-представление.


QTableView новые возможности.