您可以通过样式选项影响图标与文本之间的位置。
如果QTableWidgetItem是通过不接受文本参数的构造函数构造的,则Qt :: DisplayRole数据项未设置,文本将不会显示,也不会影响图标的显示矩形。
我能够通过子类化QTableWidget,重写viewOptions方法并设置视图选项中的decorationAlignment字段来影响QTableWidgetItem的图标位置,像这样:
QStyleOptionViewItem MyTableWidget::viewOptions() const
{
QStyleOptionViewItem option = QTableWidget::viewOptions();
option.decorationAlignment = Qt::AlignHCenter | Qt::AlignCenter;
option.decorationPosition = QStyleOptionViewItem::Top;
...
return option;
}
int row = 0;
int column = 0;
QSize sizeIcon(32, 32);
QString iconSrc = ":/Actions/myicon.png";
QWidget *pWidget = new QWidget();
QLabel *label = new QLabel;
label->setMaximumSize(sizeIcon);
label->setScaledContents(true);
label->setPixmap(QPixmap(iconSrc));
QHBoxLayout *pLayout = new QHBoxLayout(pWidget);
pLayout->addWidget(label);
pLayout->setAlignment(Qt::AlignCenter);
pLayout->setContentsMargins(0,0,0,0);
pWidget->setLayout(pLayout);
this->ui->myTableWidget->setCellWidget(row, column, pWidget);
QLabel *lbl_item = new QLabel();
lbl_item ->setPixmap(*ui->my_label->pixmap());
lbl_item ->setAlignment(Qt::AlignHCenter);
ui->my_tablewidget->setCellWidget(row, column, lbl_item);
我认为QTableWidgetItem的基本行为不允许您更改与图标相关的任何内容...
看一下Qt的示例“Star Delegate Example”,也许您会在解决问题时发现有趣的东西!这是一项有点工作量的任务,但当单元格不包含任何文本时,您应该能够以不同的方式“绘制”单元格!
希望这些能有所帮助!