1、按照原始图片尺寸定义一张透明的新图形
2、使用画家工具在新图形上绘制一个圆角矩形线路
3、绘制图片
4、使用圆角矩形切割图片边角
- QPixmap Widget::getRoundedPixmap(const QPixmap srcPixmap, const int radius)
- {
- // 目标图片尺寸
- QSize desSize = srcPixmap.size();
-
- // 新建一个目标大小的画布Qpixmap
- QPixmap 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);