700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Qt编写自定义控件:简单的方式绘制渐变进度条

Qt编写自定义控件:简单的方式绘制渐变进度条

时间:2018-10-06 19:15:51

相关推荐

Qt编写自定义控件:简单的方式绘制渐变进度条

代码:

#ifndef MYPROGRESSBAR_H#define MYPROGRESSBAR_H#include <QProgressBar>class myProgressBar : public QProgressBar{public:myProgressBar(QWidget * parent = nullptr);protected:void paintEvent(QPaintEvent *event)override;};#endif // MYPROGRESSBAR_H

#include "myprogressbar.h"#include <QPainter>#include <QStyleOptionProgressBar>#include <QStylePainter>#include <QDebug>#include <QPaintEvent>myProgressBar::myProgressBar(QWidget *parent):QProgressBar(parent){setMinimumSize(180,150);setAlignment(Qt::AlignCenter);}void myProgressBar::paintEvent(QPaintEvent *event){QStylePainter painter(this);painter.setRenderHint(QPainter::Antialiasing,true);QStyleOptionProgressBar option;initStyleOption(&option);// painter.drawControl(QStyle::CE_ProgressBar,option);QStyleOptionProgressBar opt1 = option;opt1.rect = this->style()->subElementRect(QStyle::SE_ProgressBarContents, &opt1, this);QStyleOptionProgressBar opt2 = option;QRect rect = QRect(opt1.rect.topLeft().x(),opt1.rect.topLeft().y(),opt1.rect.width() * opt1.progress / opt1.maximum,opt1.rect.height());auto eventRect = event->rect();QLinearGradient linearGradient(eventRect.topLeft(),eventRect.topRight());linearGradient.setColorAt(0.0,Qt::red);linearGradient.setColorAt(0.3,Qt::cyan);linearGradient.setColorAt(0.7,Qt::green);linearGradient.setColorAt(1.0,Qt::blue);painter.fillRect(rect,linearGradient);if (option.textVisible){opt2.rect = this->style()->subElementRect(QStyle::SE_ProgressBarLabel, &opt2, this);painter.setPen(Qt::red);painter.drawControl(QStyle::CE_ProgressBarLabel, opt2);}}

使用:

Widget::Widget(QWidget *parent): QWidget(parent){QVBoxLayout * vb = new QVBoxLayout(this);myProgressBar * bar = new myProgressBar(this);QSlider * slider = new QSlider(Qt::Horizontal,this);slider->setRange(0,100);bar->setRange(0,100);vb->setContentsMargins(20,20,20,20);vb->addWidget(bar);vb->addStretch();vb->addWidget(slider);connect(slider,&QSlider::valueChanged,bar,&QProgressBar::setValue);}

效果:

相关博文:QT风格(QStyle):绘制一个自定义QProgressBar_友善啊,朋友的博客-CSDN博客

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。