Qt QLabel锯齿设置Antialiasing无效,求解决

LinusLan 2023-04-19 14:23:08

在QLabel上加载图片,想将图片设置为圆角,但是设置了之后锯齿严重,加了Antialiasing属性也是一样不行,下面是我的代码:

QPixmap QLabelUtils::pixmapToRound(QPixmap& src, int x, int y, int width, int height, int radius) {
    if (src.isNull()) {
        return QPixmap();
    }

    QSize size(width, height);
    QBitmap mask(size);
    QPainter painter(&mask);
    painter.setRenderHints(QPainter::Antialiasing|QPainter::SmoothPixmapTransform);
    painter.fillRect(x, y, size.width(), size.height(), Qt::white);
    painter.setBrush(QColor(0, 0, 0));

    QPainterPath path;
    path.addRoundedRect(x, y, size.width()-1, size.height()-1, radius, radius);
    path.translate(0.5, 0.5);
    painter.drawPath(path);

    QPixmap image = src.scaled(size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
    image.setMask(mask);
    return image;
}

调用这个方法之后,图片是变圆角了,但是有锯齿,抗锯齿也设置了,但是不起作用,求教怎么解决这个问题?

我的Qt版本是6.4。

这个问题太折磨人了,有没有哪位大神帮个忙。

...全文
394 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

我也发现了这个问题,QPainter画的圆角远没有设置样式表的圆角来的圆润,而且设置了抗锯齿也没发现起作用

LinusLan 2023-04-20
  • 举报
回复
@苏州安瑞软件有限公司 你的代码什么样的?贴出来看看,我们研究一下。
  • 举报
回复
@LinusLan 用法和你一样的,我们老板也没那么重视这个细节,就不管它了
mideum 2023-04-19
  • 打赏
  • 举报
回复

    QPixmap image(width, height);
    image.fill(Qt::transparent);
    QPainter painter(&image);
    painter.setRenderHints(QPainter::Antialiasing|QPainter::SmoothPixmapTransform);
    painter.setBrush(QBrush(src));
    painter.drawRoundedRect(x, y, width, height, radius, radius);
    return image;
LinusLan 2023-04-19
  • 举报
回复
@mideum 谢谢,试过了,不行。
mideum 2023-04-21
  • 举报
回复
@LinusLan 我这方法是用QPainter的情况下最圆润的圆角了,比用mask强多了

16,801

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧