当前位置:主页 > c/c++教程 > Qt线条型加载条

Qt自定义控件实现线条型加载条的代码及效果

发布:2021-05-22 08:32:39 59


本站精选了一篇Qt控件相关的编程文章,网友空博超根据主题投稿了本篇教程内容,涉及到Qt线条型加载条、Qt线条加载条、Qt加载条、Qt线条型加载条相关内容,已被304网友关注,如果对知识点想更进一步了解可以在下方电子资料中获取。

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();
}

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


参考资料

相关文章

网友讨论