Вы можете повлиять на положение значка по отношению к тексту с помощью параметров стиля.
Если QTableWidgetItem создается без какого-либо текста (через конструктор, который не принимает текстовый аргумент), тогда элемент данных Qt :: DisplayRole не установлен, и текст не будет отображаться и не будет влиять на прямоугольник отображения значков .
Мне удалось повлиять на положение значка QTableWidgetItem путем создания подкласса QTableWidget, переопределения метода viewOptions и установки поля ornamentAlignment для параметров просмотра, например:
QStyleOptionViewItem MyTableWidget::viewOptions() const
{
QStyleOptionViewItem option = QTableWidget::viewOptions();
option.decorationAlignment = Qt::AlignHCenter | Qt::AlignCenter;
option.decorationPosition = QStyleOptionViewItem::Top;
...
return option;
}