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

结果示意图

相关推荐
cdg==吃蛋糕27 分钟前
selenium 使用方法
开发语言·python
爱掉发的小李1 小时前
前端开发中的输出问题
开发语言·前端·javascript
zyx没烦恼1 小时前
五种IO模型
开发语言·c++
Q_Q5110082852 小时前
python的婚纱影楼管理系统
开发语言·spring boot·python·django·flask·node.js·php
EutoCool2 小时前
Qt窗口:菜单栏
开发语言·c++·嵌入式硬件·qt·前端框架
nightunderblackcat3 小时前
新手向:使用Python将多种图像格式统一转换为JPG
开发语言·python
我爱Jack3 小时前
深入解析 LinkedList
java·开发语言
engchina3 小时前
Python PDF处理库深度对比:PyMuPDF、pypdfium2、pdfplumber、pdfminer的关系与区别
开发语言·python·pdf
拓端研究室3 小时前
专题:2025供应链数智化与效率提升报告|附100+份报告PDF、原数据表汇总下载
开发语言·php
一百天成为python专家3 小时前
python库之jieba 库
开发语言·人工智能·python·深度学习·机器学习·pycharm·python3.11