Qt重绘控件之等待条(来自京东刷新gif)
闲来无事制作重绘控件工作
效果如图: (因为录制帧原因,效果不佳)
源码
class Wait : public QWidget
{
Q_OBJECT
public:
Wait(QWidget *parent = 0);
~Wait();
//外接口,填充色
void fillColor(QColor color = QColor(250,167,208));
protected:
void timerEvent(QTimerEvent *);
void paintEvent(QPaintEvent *);
void drawAssist(QPainter *);
void drawFillColor(QPainter *);
private:
void initParameter();
QPointF center;
float outRadius,inRadius,value;
QColor FillColor;
bool flag;
};
Wait::Wait(QWidget *parent) : QWidget(parent)
{
value = 0;
flag = true;
startTimer(50);
}
Wait::~Wait()
{
}
void Wait::timerEvent(QTimerEvent *)
{
if(value < 360)
{
value += 20;
}
else
{
value = 0;
flag = !flag;
}
update();
}
void Wait::paintEvent(QPaintEvent *)
{
initParameter();
QPainter painter(this);
painter.setRenderHints(QPainter::SmoothPixmapTransform | QPainter::Antialiasing);
drawFillColor(&painter);
drawAssist(&painter);
}
void Wait::drawAssist(QPainter *painter)
{
painter->save();
/************************************************************************/
painter->setPen(QColor(Qt::transparent));
painter->setBrush(QColor(213,249,239));
painter->drawEllipse(center,inRadius,inRadius);
/************************************************************************/
painter->restore();
}
void Wait::drawFillColor(QPainter *painter)
{
painter->save();
/************************************************************************/
QRectF rectangle(outRadius*0.05,outRadius*0.05, outRadius*2,outRadius*2);
int startAngle = 0;
int spanAngle = 0;
if(flag)
{
startAngle = 90 * 16;
spanAngle = -value * 16;
}
else
{
startAngle = (90-value) * 16;
spanAngle = (-360+value) * 16;
}
painter->setBrush(FillColor);
painter->setPen(QColor(Qt::transparent));
painter->drawPie(rectangle, startAngle, spanAngle);
/************************************************************************/
painter->restore();
}
void Wait::initParameter()
{
center = QPointF(this->width()/2.0 , this->height()/2.0);
outRadius = this->height() / 2.0 * 0.95;
inRadius = this->height() / 2.0 * 0.75;
fillColor();
}
void Wait::fillColor(QColor color)
{
FillColor = color;
}
- 源码链接稍后上传、或查看下面公众号获取。
关注
微信公众号搜索"Qt_io_"或"Qt开发者中心"了解更多关于Qt、C++开发知识.。
笔者 - jxd