Прикол для разума в том , что никакие данные кроме как для ролей 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 размер (размер подсказку) и это повлияет на отображение столбца.