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 小时前
js 数字金额转为大写 js 金额转大写
开发语言·前端·javascript·js工具
行走在电子领域的工匠4 小时前
台达ST:自定义串行通讯传送与接收指令COMRS程序范例五
开发语言·台达plc·st语言编程·串口自定义协议
BillKu4 小时前
html2pdf.js使用与配置详解
开发语言·javascript·ecmascript
n***s9094 小时前
ThinkPHP和PHP的区别
开发语言·php
code bean4 小时前
【C++】全局函数和全局变量
开发语言·c++·c#
safestar20124 小时前
Elasticsearch ILM实战:从数据热恋到冷静归档的自动化管理
java·开发语言·jvm·elasticsearch·es
霸王大陆4 小时前
《零基础学 PHP:从入门到实战》教程-模块四:数组与函数-2
android·开发语言·php
神仙别闹4 小时前
基于C++实现(控制台)应用二维矩阵完成矩阵运算
开发语言·c++·矩阵
yi碗汤园4 小时前
C#实现对UI元素的拖拽
开发语言·ui·unity·c#
lqwh53544 小时前
python控制修改comsol边界条件仿真方法
开发语言·python