Qt QtableWidgetItem居中显示图片

QTableWidget中的表格显示图片有几种方式:

需要先将图片加载为资源。

1.直接在创建QTableWidgetItem的时候创建,但是,ICon右边会留文本的位置,不能居中显示图片,如:

tableWdiget->setItem(0,1,new QTableWidgetItem(QIcon(":/image/cpu")," "));


2.通过在item中创建一个label,通过label的setPixMap函数来显示图片,但是点击单元格没有点击效果:

QLabel *label = new QLabel("");
label->setPixmap(QPixmap(":/image/grid"));
ui->tableWdiget->setCellWidget(0,i,label);

3.通过继承 QStyledItemDelegate类使用委托来实现item中显示图片:

class QPixmapItemDelegate : public QStyledItemDelegate
{
public:
    QPixmapItemdele(QObject* parent = 0):QStyledItemDelegate(parent){ }
    //在委托类的paint中画图
    virtual void paint(QPainter *painter, const QStyleOptionViewItem &item, const QModelIndex &index) const
    {
        if(index.data(Qt::DisplayRole).canConvert<QPixmap>())
        {
            QPixmap pix = index.data(Qt::DisplayRole).value<QPixmap>();
            painter->drawPixmap(option.rect,pix);
        }
        QStyledItemDelegate::paint(painter,item,index);
    }
};

然后为tablewidget设置委托,后面就可以设置具体的某项的图片:
 

 ui->tablewidget->setItemDelegate(new QPixmapItemDelegate());

//以设置0行0列的单元格item为例:
QTableWidgetItem *pItem= new QTableWidgetItem();
ui->tablewidget->setItem(0,0,pItem);

pItem->setData(Qt::DisplayRole, QVariant::fromValue<QPixmap>(QPixmap(strImagePath.toString())));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值