如何将QTableWidgetItem图标放置在单元格的中心

如何将QTableWidgetItem图标放置在单元格的中心,qt,qt4,pyqt4,Qt,Qt4,Pyqt4,我希望表格单元格只有一个没有任何文本的图标 我看到QTableWidgetItem类有一个对齐文本的方法(int-QTableWidgetItem::textAlignment()const) 我找不到调整图标位置的方法(图标似乎卡在左边——即使单元格中没有文本) 查看状态和能量列 我认为QTableWidgetItem的基本行为不允许您更改与图标相关的任何内容 看看Qt中的示例“Star Delegate示例”,也许您会发现一些有趣的问题!这是一个小工作,但你应该能够“画”在一个不同的方式时

我希望表格单元格只有一个没有任何文本的图标

我看到
QTableWidgetItem
类有一个对齐文本的方法(
int-QTableWidgetItem::textAlignment()const

我找不到调整图标位置的方法(图标似乎卡在左边——即使单元格中没有文本)

查看状态和能量列


我认为QTableWidgetItem的基本行为不允许您更改与图标相关的任何内容

看看Qt中的示例“Star Delegate示例”,也许您会发现一些有趣的问题!这是一个小工作,但你应该能够“画”在一个不同的方式时,它不包含任何文本的单元格


希望这有点帮助

似乎您必须子类化
QTableWidgetItem
并重写函数,以便能够在需要的地方绘制图标。

您可以通过样式选项影响图标相对于文本的位置

如果构造QTableWidgetItem时没有任何文本(通过不接受文本参数的构造函数),则不会设置Qt::DisplayRole数据项,并且不会显示文本,也不会影响图标显示矩形

我能够通过对QTableWidgetItem子类化、覆盖viewOptions方法并设置视图选项的decorationAlignment字段来影响QTableWidgetItem图标的位置,如下所示:

QStyleOptionViewItem MyTableWidget::viewOptions() const
{
    QStyleOptionViewItem option = QTableWidget::viewOptions();
    option.decorationAlignment = Qt::AlignHCenter | Qt::AlignCenter;
    option.decorationPosition = QStyleOptionViewItem::Top;
    ...
    return option;
}

我遇到了一个类似的问题,我使用QLabel作为cellwidget
解决了这个问题,但没有进行子分类(遗憾的是,我也需要使用布局):


我使用了以下方法:

您可以使用:setCellWidget,如下所示:

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);

这会将图标置于中间

很遗憾,无法将option.decorationPosition设置为中间,只能设置为顶部、左侧、右侧或底部。这似乎是一个很大的遗漏。为此,您需要使用QTableWidget::setCellWidget()来设置带有QPixmap的QLabel,或者使用QStyledItemDelegate并重写QStyledItemDelegate::paint()。也可以覆盖QTableWidgetItem或QTableWidget的绘制。您需要使用委托
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);