QTableView如何插入图片(ICON)在文字的右边方法一:
QStyledItemDelegate 继承自 QAbstractItemDelegate,主要用于为 Model-View 中的数据项提供显示和编辑功能。
采用继承QStyledItemDelegate重写paint的方法来实现重绘
#include <QTableView>
#include <QPainter>
#include <QStyledItemDelegate>
#include <QStyleOptionViewItem>
class IconDelegate : public QStyledItemDelegate
{
public:
IconDelegate(QObject* parent = nullptr) : QStyledItemDelegate(parent) {}
void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override
{
QStyleOptionViewItem opt = option;
initStyleOption(&opt, index);
if (index.column() == 1) //限定只改变第2列,具体根据实际情况写判断条件
{
QRect iconRect = option.rect;
iconRect.setLeft(iconRect.right() - opt.rect.height()+5); //重要代码,图片所在位置
QIcon icon = qvariant_cast<QIcon>(index.data(Qt::DecorationRole));
QSize iconSize = icon.actualSize(iconRect.size());
QRect textRect = option.rect;
textRect.setLeft(textRect.left()); //文字所在的位置
painter->save();
painter->drawText(textRect, Qt::AlignHCenter | Qt::AlignVCenter, index.data().toString());
painter->restore();
icon.paint(painter, iconRect, Qt::AlignCenter);
}
else
{
QStyledItemDelegate::paint(painter, option, index);
}
}
};
应用方法,只需要在tableview实例化之后设置此属性即可
m_tabview->setItemDelegate(new IconDelegate(m_tabview));