網(wǎng)上給出的方法會(huì)導(dǎo)致圖片平鋪,如果圖片小則會(huì)繪制很多。不知道是不是在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);//設(shè)置畫(huà)筆為無(wú)鋸齒
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();
}

繪制圓形頭像圖片,有一點(diǎn)瑕疵形狀是方形的圖片四角可能會(huì)被遮擋部分。不過(guò)對(duì)于我來(lái)說(shuō)已經(jīng)滿足要求了。
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);//設(shè)置畫(huà)筆為無(wú)鋸齒
painter->setPen(QPen(Qt::lightGray, 2, Qt::SolidLine));
painter->drawRoundRect(bgRect.x() + (bgRect.width() - mHeadSize) / 2, bgRect.y(), mHeadSize, mHeadSize, mHeadSize, mHeadSize);//繪制圓形圈圈
QPainterPath path;//加入一個(gè)圓形 繪圖是從左上角的(56,20)坐標(biāo)開(kāi)始繪制的 ,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();
}

浙公網(wǎng)安備 33010602011771號(hào)