一、效果展示:
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;
//增加优化代码如下:
bool flg = img->load(path2); //将图像资源载入对象img,注意路径,可点进图片右键复制路径
if(!flg){
path2 = pic_Dir+strList.at(index)+".jpg";
img->load(path2);
}
//若兼容其他格式可以继续判断img->load()的返回值。
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);
}
}
三、应用下载
1、你若没时间研究代码,这里有打包好的应用
1、优化操作:增加对jpg和png格式的兼容
//增加优化代码如下:
bool flg = img->load(path2); //将图像资源载入对象img,注意路径,可点进图片右键复制路径
if(!flg){
path2 = pic_Dir+strList.at(index)+".jpg";
img->load(path2);
}
//若兼容其他格式可以继续判断img->load()的返回值。
![在这里插入图片描述](https://img-blog.csdnimg.cn/0dd958f6e92b49fba17af6ac7ba59650.png)
2、优化操作:设置了对图片大小显示的限制,防止图片剪裁尺寸带来的显示问题。