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

时间:2009-11-10 13:27:47

标签: qt qt4 pyqt4

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

我看到QTableWidgetItem类有一种方法来对齐文本(int QTableWidgetItem::textAlignment () const

我发现无法调整图标的位置(这似乎卡在左侧 - 即使单元格中没有文字)

查看状态和能源列。

alt text

6 个答案:

答案 0 :(得分:8)

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

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

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

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

答案 1 :(得分:6)

我有一个类似的问题我通过使用QLabel作为cellwidget来解决它而没有子类化(遗憾的是我也需要使用布局):

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

我使用了以下方法:
http://falsinsoft.blogspot.de/2013/11/qtablewidget-center-checkbox-inside-cell.html

答案 2 :(得分:2)

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

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

希望这有点帮助!

答案 3 :(得分:2)

您可以使用: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);

这会将Icon置于中心

答案 4 :(得分:1)

您似乎必须继承QTableWidgetItem并重写paintEvent功能,您可以在其中绘制图标。

答案 5 :(得分:0)

您需要使用委托