QPainter 绘制圆角矩形 drawRoundRect详解
时间:2023-06-16 18:37:00
不废话!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
函数原型为:
/* 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椭圆框是用百分比分割矩形绘制的。