,,Qt编写自定义控件实现抽奖转盘

,,Qt编写自定义控件实现抽奖转盘

这篇文章主要为大家详细介绍了夸脱编写自定义控件实现抽奖转盘,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了夸脱自定义控件实现抽奖转盘的具体代码,供大家参考,具体内容如下

# IFN def LOTTERYTURNTABLEWIDGET _ H

#定义LOTTERYTURNTABLEWIDGET_H

#包含QWidget

类LotteryTurntableWidget:公共q小部件

{

q _对象

q _ PROPERTY(int rotate READ get rotate WRITE set rotate MEMBER painter rotate)

公共:

LotteryTurntableWidget(q widget * parent=nullptr);

~LotteryTurntableWidget()覆盖;

int get rotate();

void set rotate(int rotate);

受保护:

void paint事件(qpaint事件*事件)覆盖;

void mousePressEvent(QMouseEvent *事件)覆盖;

void mouseReleaseEvent(QMouseEvent *事件)覆盖;

私人:

质量中心BTN质量。

bool isPressCenterBtn { false };

bool正在运行{ false };

int painter rotate { 0 };

void onRotateFinished();

qlist Qt:全局颜色颜色列表;

};

# endif//LOTTERYTURNTABLEWIDGET _ H

# include ' lotteryturntablewidget。' h '

#包括q画师

#包含QPaintEvent

#包含QPainterPath

#包含QTime

#包含QDebug

#包含随机发电机

#包含qpropertymanimation

LotteryTurntableWidget:LotteryTurntableWidget(q widget * parent)

:QWidget(父级)

{

设置调色板(Qt:white);

setMinimumSize(500,500);

颜色列表Qt:红色Qt:黄色Qt:绿色Qt:青色Qt:蓝色Qt:品红色Qt:暗绿色Qt:暗青色;

}

LotteryTurntableWidget:~ LotteryTurntableWidget()

{

}

int LotteryTurntableWidget:get rotate()

{

返回油漆旋转

}

void LotteryTurntableWidget:set rotate(int rotate)

{

painterRotate=旋转

update();

}

void LotteryTurntableWidget:paint事件(QPaintEvent * event)

{

q画师画师(这个);

painter.setRenderHint(QPainter:抗锯齿,真);//反走样开启

const auto rect=event-rect();

auto radius=std:min(rect.width()、rect。height())/2-25;

画家。save();

画家。翻译(rect。center());//将坐标系的原点设置为(r,r)

QPen笔;

钢笔。设置颜色(q color(' # f 0630 b ');

钢笔。设置宽度(16);

painter.setPen(钢笔);

painter.drawEllipse(QPoint(0,0),radius,radius);

钢笔。设置颜色(q color(' # ff 4500 ');

钢笔。设置宽度(8);

painter.setPen(钢笔);

半径-=8;

painter.drawEllipse(QPoint(0,0),radius,radius);

钢笔。设置颜色(QColor(# b 71606));

钢笔。设置宽度(40);

painter.setPen(钢笔);

半径-=24;

painter.drawEllipse(QPoint(0,0),radius,radius);

画家。save();

如果(!正在运行)

{

画家。set pen(Qt:white);

画家。套刷(Qt:白色);

}

for(int I=0;i 20我)

{

画家。旋转(18.0);

int小椭圆

如果(i % 2==0)

{

如果(正在运行)

{

if(painterRotate % 2==0)

{

画家。set pen(Qt:red);

画家。套刷(Qt:red);

}

其他

{

画家。set pen(Qt:blue);

画家。套刷(Qt:蓝色);

}

}

小椭圆=15

}

其他

{

如果(正在运行)

{

if(painterRotate % 2==0)

{

画家。set pen(Qt:blue);

画家。套刷(Qt:蓝色);

}

其他

{

画家。set pen(Qt:red);

画家。套刷(Qt:red);

}

}

小椭圆=10

}

painter.drawEllipse(QPoint(半径,0),小椭圆,小椭圆);

}

画家。restore();

钢笔。设置颜色(q color(' # ffc 228 '));

钢笔。设置宽度(20);

painter.setPen(钢笔);

半径-=30;

painter.drawEllipse(QPoint(0,0),radius,radius);

半径-=10;

auto centerRect=QRect(-radius,-radius,radius * 2,radius * 2);

画家。set pen(Qt:transparent);

画家。save();

画家。旋转(18.0 *画家旋转);

for(int I=0;I 8;我)

{

QPainterPath路径;

path.moveTo(0,0);

path.arcTo(centerRect,45 * i,45);

路径。closesubpath();

painter.fillPath(path,color list[I]);

}

画家。restore();

QPainterPath trianglePath//三角形

q多边形多边形;

polygon.append(QPoint(0,-radius * 0.55));

多边形。append(q点(-半径* 0.25,0));

多边形。append(q点(半径* 0.25,0));

trianglePath.addPolygon(多边形);

画家。设置画笔(q色(# eeda a2));

画家。绘制路径(三角形路径);

画家。设置画笔(q色(' # FDFAEA '));

radius=static_castint(半径* 0.3);

painter.drawEllipse(QPoint(0,0),radius,radius);

画家。设置画笔(isPressCenterBtn?QColor('#B91A0D ').打火机():q色(' # b91a 0d ');//中间的按钮

半径-=2;

painter.drawEllipse(QPoint(0,0),radius,radius);

centerBtnRect=QRect(rect。width()/2-radius,rect.height()/2 - radius,radius * 2,radius * 2);

画家。restore();

}

void LotteryTurntableWidget:mousePressEvent(QMouseEvent * event)

{

如果(正在运行)

{

QWidget:mousePressEvent(事件);

返回;

}

QRegion椭圆区域(centerBtnRect,QRegion:Ellipse);

isPressCenterBtn=ellipseregie。包含(event-pos());

if(isPressCenterBtn)

{

isRuning=true

qpropertymanimation * animation=new qpropertymanimation(this,' rotate ');

animation-setEasingCurve(QEasingCurve:inout cubic);

动画-设置持续时间(3000);

animation-setStartValue(0);

animation-setEndValue(QRandomGenerator:global()-bounded(360)360 * 5);

connect(animation,qabstractanmation:finished,this,LotteryTurntableWidget:onRotateFinished);

animation-start(qabstractanmation:deletewhentstopped);

update();

}

QWidget:mousePressEvent(事件);

}

void LotteryTurntableWidget:mouseReleaseEvent(QMouseEvent * event)

{

if(isPressCenterBtn)

{

isPressCenterBtn=false

update();

}

QWidget:mouseReleaseEvent(事件);

}

void LotteryTurntableWidget:onRotateFinished()

{

isRuning=false

}

效果:

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

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: