Qt中将一张图片剪裁成圆形图显示

QLabel上显示图片可以有很多种方法。将一张正方形的图贴到label上,并显示成圆形,如何做到呢?
这里用的QPixmap类
实现一个API:

static QPixmap PixmapToRound(QPixmap &src, int radius)
{
    if (src.isNull()) {
        return QPixmap();
    }

    QSize size(2*radius, 2*radius);
    QBitmap mask(size);
    QPainter painter(&mask);
    painter.setRenderHint(QPainter::Antialiasing);
    painter.setRenderHint(QPainter::SmoothPixmapTransform);
    painter.fillRect(0, 0, size.width(), size.height(), Qt::white);
    painter.setBrush(QColor(0, 0, 0));
    painter.drawRoundedRect(0, 0, size.width(), size.height(), 99, 99);

    QPixmap image = src.scaled(size);
    image.setMask(mask);
    return image;
}

用法示例:

//userPath为图片地址
QPixmap pixmap_userIcon;
pixmap_userIcon.load(userPath);
QDBG<<userPath;
//将图片剪裁压缩成20x20大小的图
QPixmap fitpixmap_userIcon=pixmap_userIcon.scaled(20, 20, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
fitpixmap_userIcon = PixmapToRound(fitpixmap_userIcon,10);
ui->label_icon->setPixmap(fitpixmap_userIcon);
//label_icon的大小限制为20x20,所以圆角radius值设为10,这样贴在label_icon上的就是一个圆形图了

你可能感兴趣的:(QT,C++)