现在最大的骗局就是买彩票中奖,中奖号完全可以人为干预,哈哈。。。
录制_2022_09_14_09_52_39_764
一 、 界面布局
顶部Qlabel 提升控件 MyQLabel
下面是完整代码
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->pushButton->setText("开 始");
ui->result_label->setStyleSheet("background-color: rgb(250, 255, 255);font-size:35px;color:blue");
connect(ui->L6,&MyQLabel::stoped,this,&MainWindow::on_showValue);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
if (ui->pushButton->text() == "开 始")
{
ui->L1->start( (QRandomGenerator::global()->bounded(3) + 2)* 3 + 8); // [0,10) 随机数据);
ui->L2->start( (QRandomGenerator::global()->bounded(1) + 2)* 3 + 7); // [0,10) 随机数据);
ui->L3->start( (QRandomGenerator::global()->bounded(2) + 2)* 3 + 5); // [0,10) 随机数据);
ui->L4->start( (QRandomGenerator::global()->bounded(3) + 2)* 3 + 6) ; // [0,10) 随机数据);
ui->L5->start( (QRandomGenerator::global()->bounded(2) + 2)* 3 + 4); // [0,10) 随机数据);
ui->L6->start( (QRandomGenerator::global()->bounded(1) + 2)* 3 + 9); // [0,10) 随机数据);
ui->pushButton->setText("停 止");
ui->result_label->clear();
}
else
{
ui->pushButton->setEnabled(false);
ui->L1->stop(0);
ui->L2->stop(500);
ui->L3->stop(1000);
ui->L4->stop(2000);
ui->L5->stop(2500);
ui->L6->stop(3000);
}
}
void MainWindow::on_showValue()
{
ui->pushButton->setText( "开 始");
// qDebug () << ui->result_label->text();
ui->result_label->setText( ui->L1->getDigital() + " " +
ui->L2->getDigital() + " " +
ui->L3->getDigital() + " " +
ui->L4->getDigital() + " " +
ui->L5->getDigital() + " " +
ui->L6->getDigital()
);
ui->pushButton->setEnabled(true);
}
#ifndef MYQLABEL_H
#define MYQLABEL_H
#include <QWidget>
#include <QLabel>
#include <QTimer>
#include <QRandomGenerator>
#include <QPainter>
#include <QFont>
#include <QPen>
#include <QFontMetrics>
#include <QDebug>
#include <QThread>
class MyQLabel : public QLabel
{
Q_OBJECT
public:
explicit MyQLabel(QWidget *parent = nullptr);
~MyQLabel();
void start(int msec);
void stop(int secs);
QString getDigital() const;
protected:
void paintEvent(QPaintEvent *);
private slots:
void on_timeroutFunction();
void on_stop();
signals:
void stoped();
private:
void drawText(QPainter &painter,int value, bool flag = false);
private:
QTimer *timer;
int offset_num; // 当前文字位置
int digital; // 当前数字
int next_digital; // 下一个数字
bool isRun;
int fontHeight;
double next_font_center;
double next_font_currecet_pos;
const int FixedHeight = 5;
int secs;
};
#endif // MYQLABEL_H
#include "myqlabel.h"
MyQLabel::MyQLabel(QWidget *parent) : QLabel(parent)
,offset_num(0)
,isRun(false)
{
timer = new QTimer();
connect(timer,SIGNAL(timeout()),this,SLOT(on_timeroutFunction()));
digital = QRandomGenerator::global()->bounded(9);
next_digital = digital + 1;
if (next_digital > 9)
next_digital = 0;
}
MyQLabel::~MyQLabel()
{
delete timer;
}
void MyQLabel::start(int msec)
{
isRun = true;
offset_num = 0;
timer->start(msec);
}
void MyQLabel::stop(int secs)
{
QTimer::singleShot(secs, this,SLOT(on_stop()));
}
void MyQLabel::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
painter.setRenderHint(QPainter::TextAntialiasing);
if (isRun)
{
drawText(painter,next_digital,true); // 上一个文字
drawText(painter,digital); // 当前的文字
}
else
{
digital = next_digital;
drawText(painter,next_digital);
}
}
void MyQLabel::drawText(QPainter &painter, int value, bool flag)
{
QFontMetrics FontMetric = QFontMetrics(painter.font());
QRectF rect = FontMetric.boundingRect(QString::number(value));
int y_pos = (this->height()-rect.height()) * 0.5 + offset_num;
qDebug () << this->height() << " " << rect.height();
if (flag)
{
next_font_center = (this->height()-rect.height()) * 0.5; // 中心位置
next_font_currecet_pos = next_font_center + offset_num - FixedHeight - rect.height(); // 文字中心向上偏移一个文字高度后, 再减去3个固定高度
y_pos = next_font_currecet_pos;
}
painter.drawText(QRectF((this->width() - rect.width()) * 0.5,
y_pos,
rect.width(),rect.height()),QString::number(value));
}
void MyQLabel::on_timeroutFunction()
{
if (next_font_center <= next_font_currecet_pos)
{
digital = next_digital;
if (digital > 9)
digital = 0;
next_digital += 1;
if (next_digital > 9)
next_digital = 0;
offset_num = 0;
}
offset_num += FixedHeight;
update();
}
void MyQLabel::on_stop()
{
isRun = false;
offset_num = 0;
timer->stop();
update();
emit stoped();
}
QString MyQLabel::getDigital() const
{
return QString::number( next_digital);
}