网上给出的方法会导致图片平铺,如果图片小则会绘制很多。不知道是不是在QWidget下绘制是否正常。
QPixmap head;
head.load(data.Url, 0, Qt::AvoidDither | Qt::ThresholdAlphaDither | Qt::ThresholdDither);
if (!head.isNull())
{
head = head.scaled(mHeadSize, mHeadSize, Qt::KeepAspectRatio, Qt::SmoothTransformation);
painter->save();
painter->setRenderHints(QPainter::HighQualityAntialiasing | QPainter::SmoothPixmapTransform);//设置画笔为无锯齿
painter->setBrush(QBrush(head));
painter->setPen(QPen(Qt::lightGray, 2, Qt::SolidLine));
painter->drawRoundRect(bgRect.x() + (bgRect.width() - mHeadSize) / 2, bgRect.y(), mHeadSize, mHeadSize, mHeadSize, mHeadSize);
painter->restore();
}
绘制圆形头像图片,有一点瑕疵形状是方形的图片四角可能会被遮挡部分。不过对于我来说已经满足要求了。
QPixmap head;
head.load(data.Url, 0, Qt::AvoidDither | Qt::ThresholdAlphaDither | Qt::ThresholdDither);
if (!head.isNull())
{
head = head.scaled(mHeadSize, mHeadSize, Qt::KeepAspectRatio, Qt::SmoothTransformation);
painter->restore();
painter->save();
painter->setRenderHints(QPainter::HighQualityAntialiasing | QPainter::SmoothPixmapTransform);//设置画笔为无锯齿
painter->setPen(QPen(Qt::lightGray, 2, Qt::SolidLine));
painter->drawRoundRect(bgRect.x() + (bgRect.width() - mHeadSize) / 2, bgRect.y(), mHeadSize, mHeadSize, mHeadSize, mHeadSize);//绘制圆形圈圈
QPainterPath path;//加入一个圆形 绘图是从左上角的(56,20)坐标开始绘制的 ,120,120是绘图的宽高
path.addEllipse(bgRect.x() + (bgRect.width() - mHeadSize) / 2, bgRect.y(), mHeadSize, mHeadSize);
painter->setClipPath(path);
painter->drawPixmap(bgRect.x() + (bgRect.width() - mHeadSize) / 2, bgRect.y(), head);
painter->restore();
painter->save();
}