1.实用Qt:解决绘制圆角边框时,圆角锯齿问题

目录

问题描述

解决方案

方案1:

方案2:

结果示意图


问题描述

做UI的时候,我们很多时候需要给绘制一个圆角边框,初识Qt绘制的童鞋,可能绘制出来的圆角边框很是锯齿,而且粗细不均匀,如下图:

解决方案

方案1:

给目标widget添加margin,且paintEvent中的绘制区域用contentsRect:

cpp 复制代码
CustomWidget::NKCustomWidget(QWidget *parent)
    : QWidget(parent)
{
    m_dWidth = 5.0;
    setContentsMargins(1.0, 1.0, 1.0, 1.0);
}

void CustomWidget::paintEvent(QPaintEvent *event)
{
    QPainter paint(this);
    paint.setRenderHints(QPainter::Antialiasing);
    QPainterPath pathBorder;

    QRectF rcFrame = contentsRect();
    QRectF rcBoder = rcFrame;
    pathBorder.addRoundedRect(rcBoder, 24, 24);
    QPen pen(Qt::red, m_dWidth);
    paint.setPen(pen);
    paint.drawPath(pathBorder);
}

方案2:

将绘制区域缩小边框宽度的像素范围

参考代码:

cpp 复制代码
void NKCustomWidget::paintEvent(QPaintEvent *event)
{
    QPainter paint(this);
    paint.setRenderHints(QPainter::Antialiasing);
    QPainterPath pathBorder;

    QRectF rcFrame = contentsRect();
    QRectF rcBoder = rcFrame.marginsRemoved(QMarginsF(m_dWidth/2, m_dWidth/2, m_dWidth/2, m_dWidth/2));
    pathBorder.addRoundedRect(rcBoder, 24, 24);
    QPen pen(Qt::red, m_dWidth);
    paint.setPen(pen);
    paint.drawPath(pathBorder);
}

结果示意图

相关推荐
FL1717131415 小时前
MATLAB的Sensitivity Analyzer
开发语言·matlab
lly20240616 小时前
jEasyUI 设置排序指南
开发语言
一起努力啊~16 小时前
算法刷题--长度最小的子数组
开发语言·数据结构·算法·leetcode
还债大湿兄16 小时前
huggingface.co 下载有些要给权限的模型 小记录
开发语言·前端·javascript
bkspiderx17 小时前
C++中的map容器:键值对的有序管理与高效检索
开发语言·c++·stl·map
Hard but lovely17 小时前
Linux: 线程同步-- 基于条件变量 &&生产消费模型
linux·开发语言·c++
汤姆yu17 小时前
基于python大数据的协同过滤音乐推荐系统
大数据·开发语言·python
爱学习的小道长17 小时前
Python Emoji库的使用教程
开发语言·python
Sammyyyyy17 小时前
Symfony AI 正式发布,PHP 原生 AI 时代开启
开发语言·人工智能·后端·php·symfony·servbay
C+-C资深大佬17 小时前
C++逻辑运算
开发语言·c++·算法