问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Qt中将非圆角图片裁剪为圆角图片的实现方法

创作时间:
作者:
@小白创作中心

Qt中将非圆角图片裁剪为圆角图片的实现方法

引用
CSDN
1.
https://m.blog.csdn.net/amyliyanice/article/details/139674958

在Qt开发中,有时需要将普通的矩形图片处理为圆角图片以提升界面美观度。本文将详细介绍如何在Qt中实现这一功能,包括具体步骤、代码实现以及使用示例。

实现步骤

将Qt非圆角图片裁剪为圆角图片,具体步骤如下:

  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);

效果展示

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号