QT實(shí)現(xiàn)年會(huì)抽獎(jiǎng)小軟件的示例代碼
一、效果展示:
1、操作說明
下拉選擇主題,點(diǎn)擊開始按鈕,開始滾動(dòng),再次點(diǎn)擊停止,顯示幸運(yùn)之星及名稱。中選人員不參與接下來的抽取,除非軟件重啟或點(diǎn)擊復(fù)位按鈕。

二、軟件代碼介紹
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_Hmain.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("幸運(yùn)之星");
? ? this->setObjectName("mainWindow");
? ? this->setStyleSheet("#mainWindow{border-image:url(:/background/bg.jpg);}");
? ? start = false;
? ? ui->caseName->setText("活動(dòng)之主題");
? ? 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()<<"多個(gè)文件";
? ? ? ? }
? ? }
}
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()<<"內(nèi)容:"<<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; //新建一個(gè)image對(duì)象
? ? QString path2;
? ? int len = ?strList.length();
? ? index = rand()%len;
? ? path2 = pic_Dir+strList.at(index)+".png";
? ? qDebug()<<"path2:"<<path2;
? ? img->load(path2); //將圖像資源載入對(duì)象img,注意路徑,可點(diǎn)進(jìn)圖片右鍵復(fù)制路徑
? ? 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;
}
//出結(jié)果
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",("請(qǐng)復(fù)位后再操作!"),QMessageBox::Close);
? ? }
}
//滾動(dòng)
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);
? ? }
}到此這篇關(guān)于QT實(shí)現(xiàn)年會(huì)抽獎(jiǎng)小軟件的示例代碼的文章就介紹到這了,更多相關(guān)QT 抽獎(jiǎng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++ map與set封裝實(shí)現(xiàn)過程講解
set set是一種關(guān)聯(lián)式容器,下面這篇文章主要給大家介紹了關(guān)于C++中map和set使用的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C++具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-03-03
C語言代碼實(shí)現(xiàn)點(diǎn)餐系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)點(diǎn)餐系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-07-07
詳解如何在C/C++中測(cè)量一個(gè)函數(shù)或功能的運(yùn)行時(shí)間
本文算是一個(gè)比較完整的關(guān)于在 C/C++ 中測(cè)量一個(gè)函數(shù)或者功能的總結(jié),最后會(huì)演示三種方法的對(duì)比,文章通過代碼示例給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-12-12
VC中LINK 2001 和 LINK 2009 的錯(cuò)誤的解決方法
最近將兩個(gè)開源C++項(xiàng)目編譯成windows版本的時(shí)候遇到很多問題,編譯的時(shí)候總是報(bào)錯(cuò),報(bào)的最多的是無法解析的外部符號(hào)”,經(jīng)過近3天的折騰總算都通過了,這里是一些總結(jié)2020-10-10

