Роли в модели данных

Прикол для разума в том , что никакие данные кроме как для ролей DisplayRole и EditRole НЕ ХРАНЯТСЯ в кэше модели данных QSqlTableModel.

Что такое кэш смотрите здесь submitAll.

QVariant QSqlTableModel::data(const QModelIndex &index, int role) const
{
    Q_D(const QSqlTableModel);
    if (!index.isValid() || (role != Qt::DisplayRole && role != Qt::EditRole))
        return QVariant();

То есть все другие роли типа CheckStateRole, UserRole, BackgroundRole, TextAlignmentRole и т.д. - мы должны реализовывать сами! И где же? Ну конечно же в классах наследниках от QSqlTableModel.

Сами должны создавать хранилище для каждой из ролей для таких данных в нашем наследуемом от QSqlTableModel классе.

Надо понимать, что роли запрашиваются например QSqlTableView у модели данных , например QSqlTableModel.

В случае с QSqlTableView для SizeHintRole можно отдать Hint размер (размер подсказку) и это повлияет на отображение столбца.