Qt实现苹果状态切换按钮
本文实例为大家分享了Qt实现苹果状态切换按钮的具体代码,供大家参考,具体内容如下
代码如下
#include"button.h" #includeButton::Button(QWidget*parent): QPushButton(parent) { status=0; span_length=0; rl_flag=false; release_flag=true; timeline=newQTimeLine; connect(timeline,SIGNAL(frameChanged(int)),this,SLOT(timeOut(int))); } voidButton::paintEvent(QPaintEvent*e) { QPainterpainter(this); painter.setRenderHint(QPainter::Antialiasing,true); QPenpen; pen.setWidth(2); pen.setColor(QColor(219,219,219)); painter.setPen(pen); painter.setBrush(Qt::green); painter.drawRoundedRect(1,1,this->width()-2,this->height()-2,30,30); painter.setBrush(Qt::white); painter.setPen(pen); if(!rl_flag){ switch(status) { case0:painter.drawEllipse(1,1,this->height()-3,this->height()-3);break; case1:painter.drawRoundedRect(1,1,span_length,this->height()-2,30,30);break; case2:painter.drawEllipse(this->width()+3-this->height(),1,this->height()-3,this->height()-3);rl_flag=true;status=0;break; } }else{ switch(status) { case0:painter.drawEllipse(this->width()+3-this->height(),1,this->height()-3,this->height()-3);break; case1:painter.drawRoundedRect(this->width()-1-span_length,1,span_length,this->height()-2,30,30);break; case2:painter.drawEllipse(1,1,this->height()-3,this->height()-3);rl_flag=false;status=0;break; } } } voidButton::drawSpan(QPainterpainter,ints) { } voidButton::mousePressEvent(QMouseEvent*e) { timeline->setDuration(400); span_length=0; status=1; if(!rl_flag){ intr1=this->height()-3; intr2=(this->width()/4*3)>r1?(this->width()/4*3):r1; timeline->setFrameRange(r1,r2); }else{ intr1=this->height()-3; intr2=(this->width()/4*3)>r1?(this->width()/4*3):r1;//(this->width()/4*1)>r1?(this->width()/4*1):r1; timeline->setFrameRange(r1,r2); } timeline->start(); } voidButton::mouseMoveEvent(QMouseEvent*e) { } voidButton::mouseReleaseEvent(QMouseEvent*e) { timeline->stop(); status=2; update(); } voidButton::timeOut(intx) { status=1; span_length=x; update(); }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。