直接上代码,建立一个Qt Widgets Application
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include<QPainter>
#include <QWidget>
#include<QTimer>
#include <QPaintEvent>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
protected:
virtual void paintEvent(QPaintEvent *event);
virtual void mousePressEvent(QMouseEvent *event);
public slots:
void rtTimerOutSlot();
void luckStartSlot();
private:
Ui::Widget *ui;
qreal rtAngle;//旋转多少度
QTimer rtTimer; //旋转定时器
QPainter rotaionPainter;
QPainter pointPainter;
int randNumber;//目标多少度
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include<qDebug>
#include<QTime>
Widget::Widget(QWidget *parent) :
QWidget(parent),
rtAngle(0.0),
ui(new Ui::Widget)
{
ui->setupUi(this);
connect(&rtTimer,SIGNAL(timeout()),this,SLOT(rtTimerOutSlot()));
connect(this, SIGNAL(luckStartSignal()), this, SLOT(luckStartSlot()));
// rtTimer.setInterval(5);
}
Widget::~Widget()
{
delete ui;
}
void Widget::paintEvent(QPaintEvent *event)
{
//画图操作
rotaionPainter.begin(this);
rotaionPainter.translate(200,200);
rotaionPainter.rotate(rtAngle);//旋转多少度
rotaionPainter.setRenderHint(QPainter::Antialiasing,true);
rotaionPainter.drawPixmap(-200,-200,400,400,QPixmap(":/png/image/png/luck.png"));
rotaionPainter.end();
pointPainter.begin(this);
//绘制指针
pointPainter.translate(200,200);
pointPainter.setRenderHint(QPainter::Antialiasing,true);
static const QPoint point[4]={QPoint(0,18),QPoint(20,0),QPoint(0,-100),QPoint(-20,0)};
pointPainter.setBrush(QColor(Qt::darkBlue));
pointPainter.drawPolygon(point,4);
//绘制钉子
static const QRect rectangle(-7,-7,14,18);
pointPainter.setBrush(QColor(Qt::darkYellow));
pointPainter.drawEllipse(rectangle);
pointPainter.end();
}
void Widget::rtTimerOutSlot()
{
rtAngle++;
//设置4档速度 4AT
if((rtAngle - randNumber) == 90)
{ //if(randNumber = 427 ) rtAngle = 427 + 90
rtTimer.setInterval(10); //第一次降低速度
}
else if((rtAngle - randNumber) == 180)
{ //427 + 180
rtTimer.setInterval(15); //第二次降速
}
else if((rtAngle - randNumber) == 270)
{
rtTimer.setInterval(20); //第三次降速
}
else if((rtAngle - randNumber) == 360)
{
rtAngle--; //让速度慢慢降为0
//前面有个++ 这里来个-- 就相当于rtAngle 没有动
}
update();
}
void Widget::mousePressEvent(QMouseEvent *event)
{
if(event->button()==Qt::LeftButton)
{
if(event->pos().x()>180&&event->pos().x()<220&&event->pos().y()>130&&event->pos().y()<216)
{
qDebug()<<"point event";
emit luckStartSlot();
}
}
}
//自动旋转
void Widget::luckStartSlot()
{
/* 撒一把随机数 */
rtAngle = 1;
qsrand(QTime(0, 0, 0).secsTo(QTime::currentTime()));
randNumber=180 + qrand()%(540-180);
rtTimer.start(5);
}