Qt之转盘抽奖
-
- Qt之转盘抽奖
- 叙述
- 效果图
- 代码
- LotteryDemocpp
- LotteryDemoh
- 结尾
叙述
今天参加了,苏宁易购官网上的幸运大转盘抽奖活动。可惜了,没中,但是触发了下我的灵感,什么灵感呢。就是用QT也实现一把大转盘抽奖。好了,上效果图吧,仅供参考学习,相关切图属于苏宁所有。
效果图
代码
LotteryDemo.cpp
#include "lotterydemo.h"#include <QPainter>#include <QPixmap>#include <QTime>#include <QMouseEvent>#include <QDebug>#include <QPropertyAnimation>#include <QMessageBox>#include "commonmaskwidget.h"QString LottertData[] = { QStringLiteral("Iphone手机"), QStringLiteral("IPAD平板"), QStringLiteral("IPAD平板"), QStringLiteral("上海迪士尼门票"), QStringLiteral("上海迪士尼门票"),\QStringLiteral("剑南春酒文化之旅"), QStringLiteral("剑南春酒文化之旅"), QStringLiteral("古井酒文化之旅"), QStringLiteral("古井酒文化之旅"), QStringLiteral("怡宝定制饮水机"), QStringLiteral("怡宝定制饮水机"),\QStringLiteral("再来一次"), QStringLiteral("再来一次"), QStringLiteral("谢谢参与"), QStringLiteral("谢谢参与"), QStringLiteral("Iphone手机")};LotteryDemo::LotteryDemo(QWidget *parent): QWidget(parent), m_rotation(0){ui.setupUi(this);initControl();}LotteryDemo::~LotteryDemo(){}void LotteryDemo::initControl(){qsrand(QTime(0, 0, 0).secsTo(QTime::currentTime()));setMouseTracking(true);}int LotteryDemo::getRotate(){return m_rotation;}void LotteryDemo::setRotate(int rotate){m_rotation = rotate;update();}void LotteryDemo::paintEvent(QPaintEvent* event){QPainter painter(this);painter.setRenderHint(QPainter::SmoothPixmapTransform, true);painter.save();//窗口宽、高int nWindowWidth = this->width();int nWindowHeight = this->height();//背景图QPixmap pixmap = QPixmap(":/LotteryDemo/Resources/back.png");//中心偏移至中心位置painter.translate(nWindowWidth / 2, nWindowHeight / 2);//旋转m_rotation角度painter.rotate(-1 * m_rotation);painter.drawPixmap(QRect(0 - nWindowWidth / 2, 0 - nWindowHeight / 2, pixmap.width(), pixmap.height()), pixmap);painter.restore();//绘制方向指针QPixmap pointer = QPixmap(":/LotteryDemo/Resources/pointer.png");m_pointerRect = QRect((nWindowWidth - pointer.width()) / 2, (nWindowHeight - pointer.height() - 30) / 2, pointer.width(), pointer.height());painter.drawPixmap(m_pointerRect, pointer);__super::paintEvent(event);}void LotteryDemo::mousePressEvent(QMouseEvent *event){if (qApp->mouseButtons() == Qt::LeftButton){QRegion ellipseRegion(m_pointerRect, QRegion::Ellipse);if (ellipseRegion.contains(event->pos())){int rotateRand = qrand() % 360 + 360 * 5;m_rotation = 0;QPropertyAnimation *animation = new QPropertyAnimation(this, "rotate");animation->setEasingCurve(QEasingCurve::OutCubic);animation->setDuration(5000);animation->setStartValue(0);animation->setEndValue(rotateRand);connect(animation, SIGNAL(finished()), this, SLOT(onRotateFinished()));animation->start(QAbstractAnimation::DeleteWhenStopped);}}__super::mousePressEvent(event);}void LotteryDemo::mouseMoveEvent(QMouseEvent *event){QRegion ellipseRegion(m_pointerRect, QRegion::Ellipse);if (ellipseRegion.contains(event->pos())){setCursor(Qt::PointingHandCursor);}else{setCursor(Qt::ArrowCursor);}__super::mouseMoveEvent(event);}void LotteryDemo::onRotateFinished(){float rotation = m_rotation - 360 * 5;int currentIndex = 0;for (int index = 0; index < 16; index++){rotation -= 22.5;if (rotation <= 0){currentIndex = index;break;}}QMessageBox msgBox;QString message = QStringLiteral("恭喜您中奖:%1 !").arg(LottertData[currentIndex]);msgBox.setText(message);msgBox.exec();}
LotteryDemo.h
#ifndef LOTTERYDEMO_H#define LOTTERYDEMO_H#include <QtWidgets/QWidget>#include "ui_lotterydemo.h"class LotteryDemo : public QWidget{Q_OBJECTQ_PROPERTY(int rotate READ getRotate WRITE setRotate)public:LotteryDemo(QWidget *parent = 0);~LotteryDemo();private:void initControl();public:int getRotate();void setRotate(int rotate);private slots:void onRotateFinished();private:void paintEvent(QPaintEvent*);// 绘制事件void mousePressEvent(QMouseEvent *event);void mouseMoveEvent(QMouseEvent *event);private:Ui::LotteryDemoClass ui;int m_rotation;QRect m_pointerRect;};#endif // LOTTERYDEMO_H
结尾
全部代码,都在上面了,希望对大伙有所点启发和帮助,只为记录,只为分享! 愿所写能对你有所帮助。不忘记点个赞,谢谢~
需要工程文件的,可以加我QQ工作号,因权限问题,暂时不能邮箱。