列表代理中绘制item背景颜色
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
QStyleOptionViewItem viewOption(option);
initStyleOption(&viewOption, index);
if (option.state.testFlag(QStyle::State_HasFocus))
viewOption.state &= ~QStyle::State_HasFocus; // 去掉焦点虚线
// 方法一,会绘制边框
//painter->setBrush(QBrush(QColor(Qt::gray)));//填充灰色,会绘制item边框
//painter->drawRect(option.rect);
//方法二,通过把画笔透明度设置0达到无边框效果。绘图前准备画笔、画刷
QPen oldPen = painter->pen(); //保存旧画笔
QPen pen; //画笔。绘制图形边线,由颜色、宽度、线风格等参数组成
pen.setColor(QColor(0,0,0,0));//alpha=0
QBrush oldBrush = painter->brush();
QBrush brush; //画刷。填充几何图形的调色板,由颜色和填充风格组成
brush.setColor(QColor(0,255,0,120));
brush.setStyle(Qt::SolidPattern);
//可在QPaintDevice上绘制各种图形。QPaintDevice有之类QWidget、QImage、QOpenGLPaintDevice等
painter->setPen(pen);
painter->setBrush(brush);
painter->drawRect(option.rect);
painter->setPen(oldPen);//还原旧画笔
painter->setBrush(oldBrush);
//方法三,通过绘制图片方式绘制背景颜色
// 此方式无需手动计算居中
QStyleOptionViewItem itemStyle = option;
itemStyle.displayAlignment = Qt::AlignCenter;
QRect bgRect = itemStyle.rect.adjusted(2, 2, -2, -2);
static QPixmap bg(bgRect.size());
bg.fill(QColor(240, 240, 240));
QApplication::style()->drawItemPixmap(painter, bgRect, Qt::AlignCenter, bg);
// 此方式需要手动计算居中(rect)
painter->drawPixmap(bgRect, bg);
//绘制文字
painter->drawText(bgRect, Qt::AlignLeft | Qt::AlignBottom, data.FileInfo.fileName());
}