paint options

Сразу надо понять , что не все роли в модели данных валидны! Как это так?

Всегда можно проверить валидость роли в модели данных примерно так :

QVariant vv = table_QSqlRelationalTableModel::data(idx , role);
qDebug() << "   role data isValid : " << vv.isValid();

И например для роли Qt::BackgroundRole мы можем получить false.

А причина в том, что реально внутри QSqlTableModel отрабатываются только роли DisplayRole и EditRole.

Все остальные роли не реализованы.

То есть остальные роли надо реализовывать самостоятельно в классах наследниках.

Теперь надо поговорить о цветовых группах.

Класс QPalette содержит цветовую группу для каждого состояния виджета. Что это за состояния?

enum ColorGroup { Disabled, Active, Inactive, Normal }

enum ColorRole { Window, Background, WindowText, Foreground, ..., LinkVisited }

Надо понимать , что виджеты отрисовываются по событиям (paint) возникающим отнюдь не из кода программы и тем более не из модели данных. 

События прилетают от устройств из прерываний операционной системы (мышка, клавитатура,...).

Эти события попадают в обработчики QTableView. Потом они попадают в paint каждой ячейки. Там происходит выполнение drawCell для поля.

Далее происходят вариации draw функций в зависимости от типа контрола поля.

drawComlexControl рисует например для типа QComboBox в поле фон, рамку, стрелку вниз.

drawControl рисует сам текст текущего элемента списка.

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

Интересный вопрос - как влиять на стиль отображаемого контрола.

Оказыватся в параметрах вызываемого paint есть вся необходимая информация.