当前位置 主页 > 服务器问题 > Linux/apache问题 >

    Qt自定义控件实现线条型加载条

    栏目:Linux/apache问题 时间:2019-12-21 16:26

    本文实例为大家分享了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();
    }

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持IIS7站长之家。