下拉选择主题,点击开始按钮开始滚动,再次点击停止,会显示幸运星和名字。除非重新启动软件或点击重置按钮,否则被选中的人将不会参与后续抽奖。
main.h
#ifndefMAINWINDOW_H
#定义 MAINWINDOW_H#包括
#包括
#包括
#包括
#包括
#包括
#包括 "thread.h"
QT_BEGIN_NAMESPACE
命名空间 Ui { 类 主窗口 ; }
QT_END_NAMESPACE类主窗口:公共 QMainWindow{Q_OBJECTThread *线程;QTimer *定时器;Q定时器*定时器2;公共:主窗口(QWidget *父= nullptr);~主窗口();私人插槽: void on_startBtn_clicked() ;void time2out();void 显示图像(); voidon_ResetBtn_clicked();void on_selectCase_activated(const QString & arg1);私人:Ui::主窗口 *ui;void 初始化();void openTxtFile(Q字符串名称);void 随机选择();void单击停止();int g_val ,索引;bool开始;QStringList strList_store0,strList;QImage *img;const QString txt_Dir = ( QCoreApplication::applicationDirPath() + "/cfg/");QString pic_Dir = (QCoreApplication::applicationDirPath()+"/照片/") ;};#endif // MAINWINDOW_H
main.cpp
#包括 "mainwindow.h"
#包括 "ui_mainwindow.h"
#包括 "QFileDialog"
#包括 "QMessageBox"
#包括
#包括
#包括
#包括
主窗口::主窗口(QWidget *父级 ): QMainWindow(父),ui(新Ui::主窗口){ui->setupUi(这个); 初始化();线程= 新线程;timer2 = 新 QTimer(这个);连接(定时器2,信号(超时()) ,这个,SLOT(time2out()) );
}
主窗口::~主窗口()
{删除ui;}void 主窗口::初始化(){intw= QApplication::桌面()->宽度() );int h = QApplication::桌面()->高度(); 这个->setFixedSize(w,h );这个->setWindowState (Qt::窗口最大化);这个- >setWindowTitle("幸运之星" );这个->setObjectName("主窗口") ;这个->setStyleSheet("#mainWindow{border-image:url(:/background/bg.jpg);}");开始=false;ui->caseName->setText( “活动之主题”);ui->caseName->setStyleSheet("字体大小:60px;字体-重量:500;颜色:黄色");ui->名称->setStyleSheet("字体大小:60px;字体粗细:500;颜色:y黄色");ui->startBtn->setStyleSheet ("背景:#f0f;") ;ui->ResetBtn->setStyleSheet() "背景:#f0f;");ui->selectCase->setStyleSheet("背景:#f0f;");QDir 目录(txt_Dir);QStringList nameFilters;nameFilters<<"*.txt";QStringList fileList = dir.entryList(nameFilters, QDir::文件|QDir ::可读,QDir::名称);//qDebug()<<"len:"<< fileList.length();for(inti=0; i<文件列表.长度();i++) {QFileInfo f = 文件列表.at(i);//qDebug()<<"文件名:"<如果(f.文件名()!=nullptr){openTxtFile(txt_Dir+f.文件名( ));}其他{qDebug()<<"多个文件";}}}
void 主窗口::openTxtFile(QString 文件名 ) {Q文件文件(filename);//从文件目录中读取json配置文件if(! 文件.打开(QIODevice::只读)){QMessageBox ::警告(这个,“错误”,QString::来自Local8Bit("无法打开配置文件!” ), QMessageBox::关闭);返回;}Q列表<QString>列表;QString l =文件.全部读取();//qDebug()<< "内容: "<strList_store0 = l.分割("\r \n" );strList = strList_store0;}
void 主窗口::on_startBtn_clicked() {if(!开始){ui ->startBtn->setText ("停止");开始 = true;timer2->开始(50);线程->开始(); }否则{ui->startBtn->setText("开始") ;开始= 假;点击停止();}
}
void 主窗口::随机选择()
{intlen;len=strList . 长度();if(len>1){show_image() ;}
}
void 主窗口::show_image(){img=新QImage;//创建新的图像对象QString path2; int len = strList.长度(); 索引 = rand( )%len;path2 = pic_Dir+strList.at (索引)+".png";qDebug()<<“路径2:”<< path2;//添加优化代码如下:bool flg = img ->加载( path2); //加载图片资源到对象img中,注意路径,可以右键图片复制路径if(!flg){路径2= pic_Dir+strList.在(索引)+".jpg";img->加载(path2 );} //如果兼容其他格式,可以继续判断img->load()的返回值。 ui->图像->setScaledContents(true );img-> 缩放(ui->图像->尺寸() ),Qt::KeepAspectRatio);//Qt::SmoothTransformationui->图像->setPixmap(QPixmap::来自图片(*img));//val = qrand()%(len);qDebug()<<” val:"<<索引;ui->名称-> setText(strList. 在(索引));删除图片;}
//结果
void 主窗口::clickStop()
{线程->终止();定时器2->停止() ;strList.删除(索引); int list_Len = strList.长度();if(list_Len<2){q调试( )<<"val:"<<索引;QMessageBox::警告(这个,"错误",("请重新恢复操作!"),Q消息框::关闭);}
}
//滚动void 主窗口::time2out(){ 随机选择();
}void主窗口::on_ResetBtn_clicked() )
{strList = strList_store0;}void 主窗口::on_selectCase_activated(常量 QString &arg1)
{ui->案例名称->setText() arg1);}
类线程:公共Q线程
{Q_OBJECT
公共:显式 线程(QObject *父=0); 空运行();
信号:voidshow_image();
公共插槽:
};
空螺纹::运行(){同时(true){发射show_image();睡觉(100000);}}
打包的exe应用程序链接
1。优化:增加对jpg、png格式的兼容性
? 负载(路径2)? g) {path2 = pic_Dir+strList .在(索引)+".jpg";img->加载(path2) );}//如果兼容其他格式可以继续确定img->load()的返回值。 ![在此插入图片描述](https: //www.sychzs.cn/0dd958f6e92b49fba17af6ac7ba59650.png)2。优化操作:对图片尺寸显示进行限制,防止图片裁剪导致显示问题。