首页| 论坛| 消息

标题:重绘两边半圆中间矩形的疑问
作者:lwei24
日期:2022-05-16 14:46
内容:

如题,在项目开发中,自己想重绘一个两边半圆中间矩形的按钮,具体代码如下:
QPainterPath CWidget::makeSemicircleEdgeRectanglePath(QRect rect)
{
int x = rect.x();
int y = rect.y();
int w = rect.width();
int h = rect.height();
int r = h/2;
QPoint leftCenter(x+r,y+r);
QPoint rightCenter(x+w-r,y+r);
QPoint leftTop(x+r,y);
QPoint rightBottom(x+w-r,y+h);
QRect leftSemicircleRect(x,y,h,h);
QRect rightSemicircleRect(x+w-h,y,h,h);
QPainterPath semicircleEdgeRectanglePath;
semicircleEdgeRectanglePath.moveTo(leftCenter);
semicircleEdgeRectanglePath.arcTo(leftSemicircleRect,90,180);
semicircleEdgeRectanglePath.lineTo(rightBottom);
semicircleEdgeRectanglePath.arcTo(rightSemicircleRect,270,180);
semicircleEdgeRectanglePath.lineTo(leftTop);
semicircleEdgeRectanglePath.closeSubpath();
return semicircleEdgeRectanglePath;
}
void CWidget::paintEvent(QPaintEvent *event)
{
int x = 0, y = 0, w = 120, h = 30;
QRect rect(x,y,w,h);
painter.setPen(Qt::NoPen);
painter.setBrush(QColor(qRgb(20, 28, 43)));
QPainterPath linePath = this->makeSemicircleEdgeRectanglePath(rect);
&nbs ..


#1 [tanyue.esec 05-17 08:37]
用CSS很方便的吧。

半圆可以用border-radius来实现,border-radius: 15px,设置radius的像素为高度的一半就可以实现半圆弧
边框也可以用border属性,border: 2px solid white,2像素的白色实线,border也可以单独设置四个边,border-left,border-right等,左右加粗就可以单独设置左右的像素。
供参考
#2 回 tanyue.esec 的帖子 [lwei24 05-17 09:30]
tanyue.esec:用CSS很方便的吧。

半圆可以用border-radius来实现,border-radius: 15px,设置radius的像素为高度的一半就可以实现半圆弧
边框也可以用border属性,border: 2px solid white,2像素的白色实线,border也可以单独设置四个边,border-left,border-right等,左右加粗就可以单独设 .. (2022-05-17 08:37) 
多谢,这也算是一种办法!
#3 [liudianwu 05-17 09:45]
用QPainterPath 两个圆加一个矩形,相切就好。
#4 回 liudianwu 的帖子 [lwei24 05-17 16:28]
liudianwu:用QPainterPath 两个圆加一个矩形,相切就好。 (2022-05-17 09:45) 
哦哦,谢谢啦!

回复 发表
主题 版块