9

我想要一个表格单元格只有一个没有任何文本的图标。

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

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

查看状态和能量列。

替代文字

4

5 回答 5

9

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

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

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

QStyleOptionViewItem MyTableWidget::viewOptions() const
{
    QStyleOptionViewItem option = QTableWidget::viewOptions();
    option.decorationAlignment = Qt::AlignHCenter | Qt::AlignCenter;
    option.decorationPosition = QStyleOptionViewItem::Top;
    ...
    return option;
}
于 2009-11-30T20:28:44.427 回答
7

我有一个类似的问题,我没有通过使用 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

于 2015-05-29T18:48:08.047 回答
4

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

这会将图标放在中心

于 2016-08-25T12:05:36.693 回答
2

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

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

希望这会有所帮助!

于 2009-11-10T13:35:16.433 回答
1

看来您必须子类化QTableWidgetItem并重写paintEvent可以在您想要的地方绘制图标的函数。

于 2009-11-10T13:49:25.983 回答