QT实现年会抽奖小软件的示例代码
目录
- 一、效果展示:
- 二、软件代码介绍
- 1、工程目录
- 2、核心代码之主类代码部分
- 3、核心代码之线程类代码部分
一、效果展示:
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); } }
到此这篇关于QT实现年会抽奖小软件的示例代码的文章就介绍到这了,更多相关QT 抽奖内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
赞 (0)