how do i place QTableWidgetItem Icon in center of cell

前端 未结 2 2107
清歌不尽
清歌不尽 2021-02-15 06:36

i want a table cell to have just an icon without any text.

i see the QTableWidgetItem class has a method to align the text (int QTableWidgetItem::text

相关标签:
2条回答
  • 2021-02-15 06:42

    You can affect the position of the icon in relation to the text via the style options.

    If the QTableWidgetItem is constructed without any text (via the constructor that does not accept a text argument), then the Qt::DisplayRole data item is not set and the text will not be displayed nor will it affect the icons display rectangle.

    I was able to affect the position of the QTableWidgetItem's icon by subclassing the QTableWidget, overriding the viewOptions method and setting the decorationAlignment field of the view options, like this:

    QStyleOptionViewItem MyTableWidget::viewOptions() const
    {
        QStyleOptionViewItem option = QTableWidget::viewOptions();
        option.decorationAlignment = Qt::AlignHCenter | Qt::AlignCenter;
        option.decorationPosition = QStyleOptionViewItem::Top;
        ...
        return option;
    }
    
    0 讨论(0)
  • 2021-02-15 06:47

    I had a similar problem I solved it without sub classing by using a QLabel as cellwidget
    (sadly i needed to use a layout, too):

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

    I used the following approach:
    http://falsinsoft.blogspot.de/2013/11/qtablewidget-center-checkbox-inside-cell.html

    0 讨论(0)
提交回复
热议问题