锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

QPainter 绘制圆角矩形 drawRoundRect详解

时间:2023-06-16 18:37:00 矩形连接器y27g矩形连接器lcaxn500

不废话!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

函数原型为:

/* Draws a rectangle r with rounded corners. The xRnd and yRnd arguments specify how rounded the corners should be. 0 is angled corners, 99 is maximum roundedness. A filled rectangle has a size of r.size(). A stroked rectangle has a size of r.size() plus the pen width. */ void QPainter::drawRoundRect(const QRectF & r, int xRnd = 25, int yRnd = 25)

主要功能:用圆角绘制矩形 r,xRnd和yRnd参数指定圆角的圆度。0是角,99是最大圆。填充矩形的大小是r.size()。描边矩形的大小为r.size()加上笔的宽度。

其中 r其中,我们很容易理解xRand和yRand如何指定角度,为什么0是直角,99是圆度?

drawRoundRect其实是将Rect分为四个大小相同的大小Rect(A、B、C、D),然后用这四个Rect在边框上画椭圆。A、B、C、D、位于左上、右上、左下、右下。

xRend:每一个小Rect占总Rect宽度百分比

yRend:每一个小Rect占总Rect高百分比

以下是验证以前推论的一个例子:

代码如下

QPainter paint(this); paint.setRenderHint(QPainter::Antialiasing);  // 首先,画一个主题矩形框架,底色为白色,大小为220和300 paint.setBrush(QColor(255,255,255)); paint.drawRect(0,0,220,300); paint.setBrush(Qt::transparent);  // 画黑大小为160、220的矩形框,也是目的框,与下面的圆角矩形框进行比较 paint.setPen(Qt::black); paint.drawRect(20、20、160、220); // 画笔的颜色是红色 paint.setPen(Qt::red);  // 绘制A、B、C、D paint.drawEllipse(20,20,128,88); paint.drawEllipse(52、20、128、88) paint.drawEllipse(20、152、128、88) paint.drawEllipse(52、152、128、88)  // 画一个与目的框大小相同的圆角矩形,颜色为蓝色 paint.setPen(Qt::blue); paint.drawRoundRect(20、20、160、220、80、40);

修改代码如下:

QPainter paint(this); paint.setRenderHint(QPainter::Antialiasing); paint.setBrush(QColor(255,255,255); paint.drawRect(0,0,220,300); paint.setBrush(Qt::transparent);  paint.setPen(Qt::black); paint.drawRect(20,20,160,220); // 绘制A、B、C、D paint.setPen(Qt::green); paint.drawRect(20、20、128、88) paint.setPen(Qt::blue); paint.drawRect(52,20,128,88); paint.setPen(Qt::green); paint.drawRect(20、152、128、88) paint.setPen(Qt::blue); paint.drawRect(52,152,128,88);  paint.setPen(Qt::blue); paint.drawRoundRect(20、20、160、220、80、40);

通过以上代码我们可以看到代码 xRend = 80 ,yRend = 如何将目标矩形切割成四个小矩形?

QPainter paint(this); paint.setRenderHint(QPainter::Antialiasing); paint.setBrush(QColor(255,255,255); paint.drawRect(0,0,220,300); paint.setBrush(Qt::transparent);  paint.setPen(Qt::black); paint.drawRect(20、20、160、220);  paint.setPen(Qt::red); paint.drawEllipse(20,20,128,88); paint.drawEllipse(52、20、128、88)  paint.drawEllipse(20、152、128、88) paint.drawEllipse(52,152,128,88);  paint.setPen(Qt::green); paint.drawRect(20、20、128、88)  paint.setPen(Qt::blue); paint.drawRect(52,20,128,88);  paint.setPen(Qt::green); paint.drawRect(20、152、128、88)  paint.setPen(Qt::blue); paint.drawRect(52,152,128,88);  paint.setPen(Qt::blue); paint.drawRoundRect(20、20、160、220、80、40);

合并代码1和代码2后,我们可以看到,drawRoundRect中间的圆角其实就是以xRend和yRend椭圆框是用百分比分割矩形绘制的。

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章