QT 抽奖
KevinQUI 人气:0一、效果展示:
1、操作说明
下拉选择主题,点击开始按钮,开始滚动,再次点击停止,显示幸运之星及名称。中选人员不参与接下来的抽取,除非软件重启或点击复位按钮。
二、软件代码介绍
1、工程目录
2、核心代码之主类代码部分
main.h
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QCoreApplication> #include <QDesktopWidget> #include <QTimer> #include <QPixmap> #include <QSize> #include "thread.h" QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT Thread *thread; QTimer *timer; QTimer *timer2; public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); private slots: void on_startBtn_clicked(); void time2out(); void show_image(); void on_ResetBtn_clicked(); void on_selectCase_activated(const QString &arg1); private: Ui::MainWindow *ui; void Init(); void openTxtFile(QString name); void randomSelect(); void clickStop(); int g_val,index; bool start; QStringList strList_store0,strList; QImage *img; const QString txt_Dir = (QCoreApplication::applicationDirPath() + "/cfg/"); QString pic_Dir = (QCoreApplication::applicationDirPath() + "/photo/"); }; #endif // MAINWINDOW_H
main.cpp
#include "mainwindow.h" #include "ui_mainwindow.h" #include "QFileDialog" #include "QMessageBox" #include <QDebug> #include <qmath.h> #include <QtMath> #include <QRandomGenerator> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); Init(); thread = new Thread; timer2 = new QTimer(this); connect(timer2,SIGNAL(timeout()),this,SLOT(time2out())); } MainWindow::~MainWindow() { delete ui; } void MainWindow::Init(){ int w = QApplication::desktop()->width(); int h = QApplication::desktop()->height(); this->setFixedSize(w,h); this->setWindowState(Qt::WindowMaximized); this->setWindowTitle("幸运之星"); this->setObjectName("mainWindow"); this->setStyleSheet("#mainWindow{border-image:url(:/background/bg.jpg);}"); start = false; ui->caseName->setText("活动之主题"); ui->caseName->setStyleSheet("font-size:60px;font-weight:500;color:yellow"); ui->name->setStyleSheet("font-size:60px;font-weight:500;color:yellow"); ui->startBtn->setStyleSheet("background:#f0f;"); ui->ResetBtn->setStyleSheet("background:#f0f;"); ui->selectCase->setStyleSheet("background:#f0f;"); QDir dir(txt_Dir); QStringList nameFilters; nameFilters<<"*.txt"; QStringList fileList = dir.entryList(nameFilters,QDir::Files|QDir::Readable,QDir::Name); //qDebug()<<"len:"<<fileList.length(); for (int i=0;i<fileList.length();i++) { QFileInfo f = fileList.at(i); //qDebug()<<"文件名:"<<f.fileName(); if(f.fileName()!=nullptr) { openTxtFile(txt_Dir+f.fileName()); }else{ qDebug()<<"多个文件"; } } } void MainWindow::openTxtFile(QString filename){ QFile file(filename);//从文件目录读取json配置文件 if(!file.open(QIODevice::ReadOnly)) { QMessageBox::warning(this,"Error",QString::fromLocal8Bit("无法打开配置文件!"),QMessageBox::Close); return; } QList<QString> list; QString l = file.readAll(); //qDebug()<<"内容:"<<l; strList_store0 = l.split("\r\n"); strList = strList_store0; } void MainWindow::on_startBtn_clicked() { if(!start) { ui->startBtn->setText("停止"); start = true; timer2->start(50); thread->start(); }else{ ui->startBtn->setText("开始"); start = false; clickStop(); } } void MainWindow::randomSelect() { int len; len= strList.length(); if(len>1) { show_image(); } } void MainWindow::show_image() { img=new QImage; //新建一个image对象 QString path2; int len = strList.length(); index = rand()%len; path2 = pic_Dir+strList.at(index)+".png"; qDebug()<<"path2:"<<path2; img->load(path2); //将图像资源载入对象img,注意路径,可点进图片右键复制路径 ui->image->setScaledContents(true); img->scaled(ui->image->size(),Qt::KeepAspectRatio);//Qt::SmoothTransformation ui->image->setPixmap(QPixmap::fromImage(*img)); //val = qrand()%(len); qDebug()<<"val:"<<index; ui->name->setText(strList.at(index)); delete img; } //出结果 void MainWindow::clickStop() { thread->terminate(); timer2->stop(); strList.removeAt(index); int list_Len = strList.length(); if(list_Len<2) { qDebug()<<"val:"<<index; QMessageBox::warning(this,"Error",("请复位后再操作!"),QMessageBox::Close); } } //滚动 void MainWindow::time2out(){ randomSelect(); } void MainWindow::on_ResetBtn_clicked() { strList = strList_store0; } void MainWindow::on_selectCase_activated(const QString &arg1) { ui->caseName->setText(arg1); }
3、核心代码之线程类代码部分
class Thread : public QThread { Q_OBJECT public: explicit Thread(QObject *parent = 0); void run(); signals: void show_image(); public slots: }; void Thread::run() { while(true) { emit show_image(); usleep(100000); } }
加载全部内容