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

结果示意图

相关推荐
蓝莓星冰乐4 小时前
第一章:C语言概述与环境搭建
c语言·开发语言
add45a4 小时前
嵌入式C++低功耗设计
开发语言·c++·算法
毕设源码-赖学姐4 小时前
【开题答辩全过程】以 基于Java的婚礼策划平台的设计与实现为例,包含答辩的问题和答案
java·开发语言
2401_874732534 小时前
C++中的状态模式
开发语言·c++·算法
m0_716667074 小时前
实时数据压缩库
开发语言·c++·算法
dapeng28704 小时前
多协议网络库设计
开发语言·c++·算法
浅浅的小草4 小时前
APM使用LUA脚本发送实现遥控器PWM信号输出CAN协议信号
开发语言·apm
星空露珠4 小时前
又双叒叕统计被炸死的lua脚本
开发语言·数据结构·算法·游戏·lua
sinat_255487815 小时前
transient 修饰符·学习笔记
java·开发语言·spring
阿猿收手吧!5 小时前
【C++】建造者与代理模式实战解析
开发语言·c++·代理模式