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

目录

问题描述

解决方案

方案1:

方案2:

结果示意图


问题描述

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

解决方案

方案1:

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

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:

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

参考代码:
 


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

结果示意图

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-17 14:32:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-17 14:32:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-17 14:32:03       82 阅读
  4. Python语言-面向对象

    2024-03-17 14:32:03       91 阅读

热门阅读

  1. 蓝桥杯构造法|两道例题(C++)

    2024-03-17 14:32:03       41 阅读
  2. 《工厂模式(极简c++)》

    2024-03-17 14:32:03       42 阅读
  3. SpringMVC启动与请求处理流程解析

    2024-03-17 14:32:03       44 阅读
  4. 使用Go Validator在Go应用中有效验证数据

    2024-03-17 14:32:03       48 阅读
  5. PyTorch学习笔记之基础函数篇(十四)

    2024-03-17 14:32:03       41 阅读
  6. leetcode电话号码的字母组合

    2024-03-17 14:32:03       48 阅读
  7. C语言——母牛的故事

    2024-03-17 14:32:03       41 阅读
  8. Linux中的音频开发

    2024-03-17 14:32:03       44 阅读