ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

关于QT的QPainterPath::arcTo 详解

2019-11-20 18:00:46  阅读:499  来源: 互联网

标签:QT arcTo arcR 122 cornerSize QPainterPath path rect


https://www.cnblogs.com/yuzhould/p/9132493.html

 

这个函数文档的意思就是画弧,看了文档也不太明白,自己做了demo终于明白了意思

移动到圆心,画180度半圆

复制代码
void TestArcTo::paintEvent(QPaintEvent *)
{
QPoint startPt(30, 30);
QRect rect(startPt.x(), startPt.y(), 200, 200);
QPainter p(this); 
p.setRenderHint(QPainter::Antialiasing); //抗锯齿
p.fillRect(rect, QColor(255, 255, 255));

int arcR = rect.width()/2;
int rectSize = rect.width();
QPainterPath path;

path.moveTo(startPt.x() + arcR, startPt.y() + arcR); //先移动到圆心
path.arcTo(rect, 00.0f, 180.0f);      //以0度起点,逆时针画180度

p.fillPath(path, QBrush(QColor(122, 122, 122)));
}
复制代码

 

 

移动到圆心,以90度开始画180度半圆

path.moveTo(startPt.x() + arcR, startPt.y() + arcR); //先移动到圆心
path.arcTo(rect, 90.0f, 180.0f);      //以0度起点,逆时针画180度

 

 

移动到圆心,以190度开始画180度半圆

path.moveTo(startPt.x() + arcR, startPt.y() + arcR); //先移动到圆心
path.arcTo(rect, 90.0f, 180.0f);      //以0度起点,逆时针画180度

 

 

 

移动到某个点可以画弦月

 

几个点组合

 

矩形区圆角

复制代码
void TestArcTo::paintEvent(QPaintEvent *)
{
    QRect rect(30, 30, 200, 200);
    QPainter p(this);  
    p.setRenderHint(QPainter::Antialiasing);
    p.fillRect(rect, QColor(255, 255, 0));

    int cornerSize = 50;       //调节圆角的大小
    int arcR = cornerSize/2;
    QPainterPath path;
    path.moveTo(rect.left() + arcR, rect.top());
    path.arcTo(rect.left(), rect.top(), cornerSize, cornerSize, 90.0f, 90.0f);

    path.lineTo(rect.left(), rect.bottom() - arcR);
    path.arcTo(rect.left(), rect.bottom() - cornerSize, cornerSize, cornerSize, 180.0f, 90.0f);

    path.lineTo(rect.right() - arcR, rect.bottom());
    path.arcTo(rect.right() - cornerSize, rect.bottom() - cornerSize, cornerSize, cornerSize, 270.0f, 90.0f);

    path.lineTo(rect.right(), rect.top() + arcR);
    path.arcTo(rect.right() - cornerSize, rect.top(), cornerSize, cornerSize, 0.0f, 90.0f);

    p.fillPath(path, QBrush(QColor(122, 122, 122)));
}
复制代码

底部和右边有黄色边框需要处理,这就需要+1, -1微调了。理解了arcTo函数,都不难处理。

 

最方便的圆角方法

复制代码
void TestArcTo::paintEvent(QPaintEvent *)
{
    QRect rect(30, 30, 200, 200);
    QPainter p(this);  
    p.setRenderHint(QPainter::Antialiasing);
    p.fillRect(rect, QColor(255, 255, 0));

    p.setPen(Qt::NoPen);
    p.setBrush(QColor(122, 122, 122));
    p.drawRoundedRect(rect, 20, 20);
}
复制代码

标签:QT,arcTo,arcR,122,cornerSize,QPainterPath,path,rect
来源: https://www.cnblogs.com/warmlight/p/11899479.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有