1. 程式人生 > 程式設計 >Qt自定義控制元件實現線條型載入條

Qt自定義控制元件實現線條型載入條

本文例項為大家分享了Qt自定義控制元件實現線條型載入條的具體程式碼,供大家參考,具體內容如下

上效果圖:

思路:先畫一個線條,然後旋轉座標系再畫其他線條,突出顏色的線條可以畫死再旋轉,也可以按照角度遞增讓特定線畫突出顏色(這裡使用的是這種)。

LoadingBarA::LoadingBarA(QWidget *parent) :
  QWidget(parent)
{
  timer = new QTimer(this); //定時器
  timer->setInterval(50);
  connect(timer,QTimer::timeout,this,[=](){
    if(pointRect<=rectCount){
      pointRect++;
    }else{
      pointRect = pointRect%rectCount;
    }
    update();
  });
}

void LoadingBarA::paintEvent(QPaintEvent *event){ //重繪事件
  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);

  float degree = 360.0/rectCount; //rectCount:共有多少根線條

  for(int i =0;i<rectCount;i++){
    painter.rotate(degree);
    if(i == pointRect - 1){
      drawRect(&painter,darkColor); //突出顏色
    }else{
      drawRect(&painter,lightColor);//非突出顏色
    }
  }
}

void LoadingBarA::drawRect(QPainter* painter,QColor color){//畫線條
  painter->save();
  painter->setPen(Qt::NoPen);
  painter->setBrush(color);
  QRect rect(arcLength,-rectHeight/2,rectWidth,rectHeight);
  painter->drawRoundedRect(rect,rectHeight/2,rectHeight/2);
  painter->restore();
}

void LoadingBarA::setDarkColor(QColor tempColor){
  this->darkColor = tempColor;
  update();
}

void LoadingBarA::setLightColor(QColor lightColor){
  this->lightColor = lightColor;
  update();
}

void LoadingBarA::setRectWidth(int l){
  this->rectWidth = l;
  update();
}

void LoadingBarA::setRectHeight(int l){
  this->rectHeight = l;
  update();
}

void LoadingBarA::setArcLength(int l){
  this->arcLength = l;
  update();
}

void LoadingBarA::setRectCount(int l){
  this->rectCount = l;
  update();
}

void LoadingBarA::startLoading(){ //設定開始
  timer->start();
}

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