将Qt非圆角图片裁剪为圆角图片,步骤如下:
1、按照原始图片尺寸定义一张透明的新图形
2、使用画家工具在新图形上绘制一个圆角矩形线路
3、绘制图片
4、使用圆角矩形切割图片边角
封装成函数如下:
QPixmap Widget::getRoundedPixmap(const QPixmap srcPixmap, const int radius)
{// 目标图片尺寸QSize desSize = srcPixmap.size();// 新建一个目标大小的画布QpixmapQPixmap desPixMap(desSize);// 填充透明色作为背景desPixMap.fill(Qt::transparent);//以QPixmap 为绘画背景进行画笔绘制QPainter painter(&desPixMap);painter.setRenderHints(QPainter::Antialiasing); //抗锯齿painter.setRenderHints(QPainter::SmoothPixmapTransform); //平滑像素图变换QPainterPath path;//绘制路径//绘制圆角矩形,其中最后两个参数值的范围为(0-99),就是圆角的px值path.addRoundedRect(0, 0, desSize.width(), desSize.height(), radius, radius);// 将绘制的圆角矩形路径中内容进行裁剪painter.setClipPath(path);//将图片绘制到desPixmap中,IgnoreAspectRatio忽视图片比例painter.drawPixmap(0, 0, desSize.width(), desSize.height(), srcPixmap.scaled(desSize, Qt::KeepAspectRatioByExpanding, Qt::SmoothTransformation));painter.setClipping(false); // 关闭裁剪return desPixMap;
}
使用案例:
// 原始的图片
QPixmap originImg = QPixmap(":/111.png");QPixmap destImg = getRoundedPixmap(originImg,16);ui->label->setPixmap(destImg);