Qt實(shí)現(xiàn)蘋(píng)果狀態(tài)切換按鈕
本文實(shí)例為大家分享了Qt實(shí)現(xiàn)蘋(píng)果狀態(tài)切換按鈕的具體代碼,供大家參考,具體內(nèi)容如下

代碼如下
#include "button.h"
#include <QDebug>
Button::Button(QWidget *parent) :
QPushButton(parent)
{
status = 0;
span_length = 0;
rl_flag = false;
release_flag =true;
timeline = new QTimeLine;
connect(timeline,SIGNAL(frameChanged(int)),this,SLOT(timeOut(int)));
}
void Button::paintEvent(QPaintEvent *e)
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true);
QPen pen;
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)
{
case 0:painter.drawEllipse(1,1,this->height()-3,this->height()-3);break;
case 1:painter.drawRoundedRect(1,1,span_length,this->height()-2,30,30);break;
case 2:painter.drawEllipse(this->width()+3-this->height(),1,this->height()-3,this->height()-3);rl_flag=true;status=0;break;
}
}else{
switch(status)
{
case 0:painter.drawEllipse(this->width()+3-this->height(),1,this->height()-3,this->height()-3);break;
case 1:painter.drawRoundedRect(this->width()-1-span_length,1,span_length,this->height()-2,30,30);break;
case 2:painter.drawEllipse(1,1,this->height()-3,this->height()-3);rl_flag=false;status=0;break;
}
}
}
void Button::drawSpan(QPainter painter,int s)
{
}
void Button::mousePressEvent(QMouseEvent *e)
{
timeline->setDuration(400);
span_length = 0;
status=1;
if(!rl_flag){
int r1 = this->height()-3;
int r2 = (this->width()/4*3)>r1?(this->width()/4*3):r1;
timeline->setFrameRange(r1,r2);
}else{
int r1 = this->height()-3;
int r2 = (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();
}
void Button::mouseMoveEvent(QMouseEvent *e)
{
}
void Button::mouseReleaseEvent(QMouseEvent *e)
{
timeline->stop();
status = 2;
update();
}
void Button::timeOut(int x)
{
status = 1;
span_length = x;
update();
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C語(yǔ)言常見(jiàn)排序算法之交換排序(冒泡排序,快速排序)
這篇文章主要介紹了C語(yǔ)言常見(jiàn)排序算法之交換排序(冒泡排序,快速排序),冒泡排序即Bubble?Sort,類(lèi)似于水中冒泡,較大的數(shù)沉下去,較小的數(shù)慢慢冒起來(lái),假設(shè)從小到大,即為較大的數(shù)慢慢往后排,較小的數(shù)慢慢往前排2022-07-07
C語(yǔ)言實(shí)現(xiàn)字符轉(zhuǎn)unix時(shí)間戳的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)?lái)一篇C語(yǔ)言實(shí)現(xiàn)字符轉(zhuǎn)unix時(shí)間戳的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-06-06
Matlab實(shí)現(xiàn)統(tǒng)計(jì)集合中各元素出現(xiàn)次數(shù)的示例代碼
統(tǒng)計(jì)數(shù)組中各個(gè)元素?cái)?shù)量是一個(gè)很常用的功能,本文主要為大家介紹了如何利用Matlab優(yōu)雅的統(tǒng)計(jì)集合中各元素出現(xiàn)的次數(shù),感興趣的可以了解一下2022-05-05
C/C++?函數(shù)的存儲(chǔ)位置和占用空間詳解
Lambda函數(shù)的代碼部分在代碼段中,被捕獲的變量存儲(chǔ)在Lambda函數(shù)對(duì)象的內(nèi)部,這些變量的存儲(chǔ)位置取決于Lambda函數(shù)對(duì)象的存儲(chǔ)位置,這篇文章主要介紹了C/C++函數(shù)的存儲(chǔ)位置和占用空間,需要的朋友可以參考下2023-06-06
Java3D實(shí)例之創(chuàng)建空間幾何模型的實(shí)現(xiàn)方法
本篇文章是對(duì)Java3D 創(chuàng)建空間幾何模型的實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的介紹。需要的朋友參考下2013-05-05
關(guān)于STL中l(wèi)ist容器的一些總結(jié)
list就是數(shù)據(jù)結(jié)構(gòu)中的雙向鏈表(根據(jù)sgi stl源代碼),因此它的內(nèi)存空間是不連續(xù)的,通過(guò)指針來(lái)進(jìn)行數(shù)據(jù)的訪問(wèn),這個(gè)特點(diǎn)使得它的隨即存取變的非常沒(méi)有效率,因此它沒(méi)有提供[]操作符的重載2013-09-09
C語(yǔ)言的數(shù)字游戲算法效率問(wèn)題探討實(shí)例
這篇文章主要介紹了C語(yǔ)言的數(shù)字游戲算法效率問(wèn)題探討實(shí)例,需要的朋友可以參考下2014-04-04

