Qt自定义控件实现圆圈加载进度条

CMProcessBar::CMProcessBar(QWidget *parent) :
  QWidget(parent),
  ui(new Ui::CMProcessBar)
{
  ui->setupUi(this);
  QTimer *timer = new QTimer;
  connect(timer,QTimer::timeout,this,updaterRotation);// 定时旋转坐标系
  timer->start(3);//定时3毫秒
}
 
CMProcessBar::~CMProcessBar()
{
  delete ui;
}
 
void CMProcessBar::updaterRotation()
{ //循环360度旋转坐标系
  rotation++;
  if(rotation == 360)
  {
    rotation = 0;
  }
  update();
}
 
void CMProcessBar::paintEvent(QPaintEvent *event)
{//根据QPaintPath画出渐变色的圆弧
  int width = this->width();
  int height = this->height();
  int side = qMin(width, height);
 
  QPainter painter(this);
  painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);
  painter.translate(width / 2, height / 2);
  painter.scale(side / 200.0, side / 200.0);
 
  QConicalGradient gra(QPoint(0,0),0);
  gra.setColorAt(0,QColor("#3BB6FE"));
  gra.setColorAt(1,QColor("#FFFFFF"));
  QBrush brush(gra);
 
  int radis = 40;
  int sider = 5;
  QRect rect(-radis,-radis,radis*2,radis*2);
  QPainterPath path;
  path.arcTo(rect,0, 270);
 
  QPainterPath subPath;
  subPath.addEllipse(rect.adjusted(sider, sider, -sider, -sider));
 
  path = path-subPath;
  painter.setBrush(brush);//QColor("#66CFFF")
  painter.setPen(Qt::NoPen);
  painter.rotate(rotation);
  painter.drawPath(path); 
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值