QPainterPath 自绘圆角矩形

一、绘四角圆角的矩形

略。有空了写

二、绘上方两个为圆角,下面两个为直角矩形

关键函数 QPainter::arcTo(const QRectF &rect, qreal startAngle, qreal arcLength);

/*
*void arcTo(const QRectF &rect, qreal startAngle, qreal arcLength);
* 参数 QRectF &rect  圆角外切矩形大小,宽度为圆角半径的2倍
* 参数 qreal startAngle 开始角度
* 参数 qreal arcLength 运行角度
*/

例效果:
在这里插入图片描述

QPainterPath xxx::drawTopRadius(QRect &rect)
{
    QPainterPath path;
    //设置圆角半径
    const qreal radius = 4;
    //设置起点为矩形左上圆角圆心
    path.moveTo(rect.topLeft().x() + radius, rect.topLeft().y() + radius);
    //绘制圆角 圆弧以外切圆的90度位置为起点,逆时针画圆弧运行90度结束(从12点钟方向 - 9点钟方向) 
    path.arcTo(QRect(rect.topLeft(), QSize(radius * 2, radius * 2)), 90, 90);
    path.lineTo(rect.bottomLeft());
    path.lineTo(rect.bottomRight());
    path.lineTo(rect.topRight().x(), rect.topRight().y() - radius * 2);
    //画圆弧 (3点钟方向 - 12点钟方向)
    path.arcTo(QRect(QPoint(rect.topRight().x() - (radius * 2), rect.topRight().y()), QSize(radius * 2, radius * 2)), 0, 90);
    path.lineTo(rect.topLeft().x() + radius, rect.topLeft().y());
    return path;
}

三、两端为圆角的椭圆矩形

    QPainter paint(this);
    paint.setRenderHints(QPainter::HighQualityAntialiasing
                         | QPainter::SmoothPixmapTransform
                         | QPainter::Antialiasing);

    QPainterPath path;
    //移动到起点
    path.moveTo(height() / 2, 0);
    //以90度起点,逆时针画270度
    path.arcTo(QRect(0, 0, height(), height()), 90, 180);
    path.lineTo(width() - (height() / 2), height());
    //以270度起点,逆时针画180度
    path.arcTo(QRect(QPoint(width() - height(), 0), QSize(height(), height())), 270, 180);
    path.lineTo(height() / 2, 0);
    paint.fillPath(path, QBrush(QColor(0, 0, 0, 15)));

你可能感兴趣的:(Qt,widget,qt,c++)