关于绘制特殊圆角矩形的解决办法

此处介绍两种特殊圆角矩形绘制方法

一、上半部分直角,下半部分圆角

QPainterPath path;
int radius = 8; // 圆角半径

path.moveTo(shadowRect.topLeft()); // 移动到左上角
path.lineTo(shadowRect.topRight()); // 绘制上边的直线到右上角
path.lineTo(shadowRect.bottomRight() - QPoint(0, radius)); // 到右下角的圆角前的点
// 右下角圆角
path.quadTo(shadowRect.bottomRight(), shadowRect.bottomRight() - QPoint(radius, 0)); 
path.lineTo(shadowRect.bottomLeft() + QPoint(radius, 0)); // 到左下角的圆角前的点
// 左下角圆角
path.quadTo(shadowRect.bottomLeft(), shadowRect.bottomLeft() - QPoint(0, radius)); 
path.lineTo(shadowRect.topLeft()); // 回到左上角
path.closeSubpath(); // 关闭路径

p.drawPath(path); // 绘制路径

二、上半部分圆角,下半部分直角

QPainterPath path;
int radius = 8; // 圆角半径

path.moveTo(shadowRect.topLeft() + QPoint(radius, 0)); // 从左上角的圆角开始
path.lineTo(shadowRect.topRight() - QPoint(radius, 0)); // 右上角前的直线部分
// 右上角的圆角
path.quadTo(shadowRect.topRight(), shadowRect.topRight() + QPoint(0, radius));
path.lineTo(shadowRect.bottomRight()); // 右侧的直线部分到底
path.lineTo(shadowRect.bottomLeft()); // 底部的直线部分到左侧
path.lineTo(shadowRect.topLeft() + QPoint(0, radius)); // 左侧的直线部分
// 左上角的圆角
path.quadTo(shadowRect.topLeft(), shadowRect.topLeft() + QPoint(radius, 0)); 
path.closeSubpath();

p.drawPath(path); // 绘制路径

猜你喜欢

转载自blog.csdn.net/m0_74091159/article/details/143377014