1. 程式人生 > 程式設計 >Qt自定義控制元件實現圓圈載入進度條

Qt自定義控制元件實現圓圈載入進度條

本文例項為大家分享了Qt實現圓圈載入進度條的具體程式碼,供大家參考,具體內容如下

先看效果圖:

思路:畫一個佔270度的圓弧,然後定義一個定時器,定時旋轉座標系,實現旋轉的效果。圓弧需要使用漸變色,實現顏色越來越淺的效果

關鍵程式碼:CMProcessBar1.cpp

CMProcessBar1::CMProcessBar1(QWidget *parent) :
  QWidget(parent),ui(new Ui::CMProcessBar1)
{
  ui->setupUi(this);
  QTimer *timer = new QTimer;
  connect(timer,QTimer::timeout,this,updaterRotation);// 定時旋轉座標系
  timer->start(3);//定時3毫秒
}

CMProcessBar1::~CMProcessBar1()
{
  delete ui;
}

void CMProcessBar1::updaterRotation(){ //迴圈360度旋轉座標系
  rotation++;
  if(rotation == 360){
    rotation = 0;
  }
  update();
}

void CMProcessBar1::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,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);


}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。