国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Qt】三種方式實(shí)現(xiàn)抽獎(jiǎng)小游戲

這篇具有很好參考價(jià)值的文章主要介紹了【Qt】三種方式實(shí)現(xiàn)抽獎(jiǎng)小游戲。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

簡(jiǎn)介

本文章是基本Qt與C++實(shí)現(xiàn)一個(gè)抽獎(jiǎng)小游戲,用到的知識(shí)點(diǎn)在此前發(fā)布的幾篇文章。
下面是跳轉(zhuǎn)鏈接:
【Qt控件之QLabel】用法及技巧鏈接: https://blog.csdn.net/MrHHHHHH/article/details/133691441?spm=1001.2014.3001.5501

【Qt控件之QPushButton】用法及技巧 鏈接:
https://blog.csdn.net/MrHHHHHH/article/details/133692079?spm=1001.2014.3001.5501

【Qt控件之QDialog】用法及技巧 鏈接:
https://blog.csdn.net/MrHHHHHH/article/details/133721638?spm=1001.2014.3001.5501

【Qt控件之QMainWindow】用法及技巧 鏈接:
https://blog.csdn.net/MrHHHHHH/article/details/133722035?spm=1001.2014.3001.5501

【Qt控件之QTimer】用法及技巧 鏈接:
https://blog.csdn.net/MrHHHHHH/article/details/133722476?spm=1001.2014.3001.5501

實(shí)現(xiàn)方式

實(shí)現(xiàn)方式多種多樣,但畢竟是小程序,需求明確(就沒考慮操作及優(yōu)化),功能簡(jiǎn)單,條理清晰,主要提供三種實(shí)現(xiàn)方式(此階段未實(shí)現(xiàn)概率設(shè)置,之后再發(fā)布概率設(shè)置版本吧):

1. 基于while循環(huán)
  • 示例:
    先粘貼UI
    【Qt】三種方式實(shí)現(xiàn)抽獎(jiǎng)小游戲,Qt記錄,Qt編程,c++,qt,c++,開發(fā)語言

.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_FORWARD_DECLARE_CLASS(C_DlgSetting)

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    // 退出
    void slot_actQuit_triggered();
    // 設(shè)置概率
    void slot_actSetting_triggered();
    // 開始
    void slot_btnStart_clicked();
    // 停止
    void slot_btnStop__clicked();

private:
    Ui::MainWindow *ui;

    C_DlgSetting*       m_pDlgSetting; // 概率設(shè)置類

    bool                m_bFlag = false;// 標(biāo)志
};

#endif // MAINWINDOW_H

.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "DlgSetting.h"

#include <QTime>
#include <QThread>
#include <QCoreApplication>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // m_pDlgSetting = new C_DlgSetting(this);

    // 信號(hào)和槽
    {
        connect(ui->action_quit, &QAction::triggered, this, &MainWindow::slot_actQuit_triggered);
        connect(ui->action_setting, &QAction::triggered, this, &MainWindow::slot_actSetting_triggered);
        connect(ui->btn_start, &QPushButton::clicked, this, &MainWindow::slot_btnStart_clicked);
        connect(ui->btn_stop, &QPushButton::clicked, this, &MainWindow::slot_btnStop__clicked);
    }

    // 聲明隨機(jī)數(shù)種子,不然就是偽隨機(jī)(每次產(chǎn)生的隨機(jī)數(shù)都一樣)
    qsrand(QTime(0, 0, 0).secsTo(QTime::currentTime()));
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::slot_actQuit_triggered()
{
    close();
}

void MainWindow::slot_actSetting_triggered()
{
    // m_pDlgSetting->exec();
}

void MainWindow::slot_btnStart_clicked()
{
    if(m_bFlag)
    {
        return;
    }
    QStringList sl;
    sl << "一等獎(jiǎng)" << "二等獎(jiǎng)" << "三等獎(jiǎng)" << "四等獎(jiǎng)" << "五等獎(jiǎng)";
    m_bFlag = true;
    while (m_bFlag) {
        int nRange = qrand() % 5;
        ui->label_turn->setText(sl.at(nRange));
        // 100ms轉(zhuǎn)一次
        QThread::msleep(100);
        // 防止界面卡死
        QCoreApplication::processEvents();
    }
}

void MainWindow::slot_btnStop__clicked()
{
    m_bFlag = false;
    // 顯示最終獲獎(jiǎng)結(jié)果
    QString strRes = QString("最終結(jié)果: %1").arg(ui->label_turn->text());
    ui->label_res->setText(strRes);
}

.main

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

  • 結(jié)果
    【Qt】三種方式實(shí)現(xiàn)抽獎(jiǎng)小游戲,Qt記錄,Qt編程,c++,qt,c++,開發(fā)語言
  • 實(shí)現(xiàn)思路
    – 設(shè)置UI,注意命名
    – 進(jìn)行信號(hào)和槽連接
    – 實(shí)現(xiàn)"開始"和"結(jié)束"功能
    – 顯示結(jié)果
2. 基于定時(shí)器
  • 示例
    UI顯示與1.是一樣的,需借助QTimer實(shí)現(xiàn)

QTimer 是 Qt 框架中的一個(gè)類,用于在特定的時(shí)間間隔后發(fā)出一個(gè)信號(hào)。它是 Qt
的事件循環(huán)系統(tǒng)的一部分,該系統(tǒng)允許程序在等待某些事件(如用戶輸入或定時(shí)器超時(shí))時(shí)保持響應(yīng)。

QTimer 的工作原理是將定時(shí)器的超時(shí)作為一個(gè)事件添加到 Qt
的事件隊(duì)列中。當(dāng)事件循環(huán)檢測(cè)到定時(shí)器超時(shí)時(shí),它就會(huì)發(fā)出預(yù)定的信號(hào)。這種機(jī)制允許 QTimer
在等待定時(shí)器超時(shí)時(shí)不會(huì)阻塞用戶界面,因?yàn)槭录h(huán)可以繼續(xù)處理其他事件,如用戶輸入或繪制事件。

相比之下,如果使用標(biāo)準(zhǔn)的 C++ 定時(shí)器,如
std::this_thread::sleep_for,在等待定時(shí)器超時(shí)時(shí),當(dāng)前線程將被阻塞,無法處理其他事件。這會(huì)導(dǎo)致用戶界面無響應(yīng),給用戶一種程序已經(jīng)卡死的感覺。

直接粘貼相關(guān)代碼:
.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTimer>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    // 退出
    void slot_actQuit_triggered();
    // 開始
    void slot_btnStart_clicked();
    // 停止
    void slot_btnStop__clicked();
    // 定時(shí)器處理
    void slot_timeout();

private:
    Ui::MainWindow *ui;
    bool                m_bFlag = false;// 標(biāo)志

    QTimer*             m_pTimer;// 定時(shí)器
};

#endif // MAINWINDOW_H

.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QTime>
#include <QThread>
#include <QCoreApplication>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    m_pTimer = new QTimer(this);
    // 處理
    connect(m_pTimer, &QTimer::timeout, this, &MainWindow::slot_timeout);

    // 信號(hào)和槽
    {
        connect(ui->action_quit, &QAction::triggered, this, &MainWindow::slot_actQuit_triggered);
        connect(ui->btn_start, &QPushButton::clicked, this, &MainWindow::slot_btnStart_clicked);
        connect(ui->btn_stop, &QPushButton::clicked, this, &MainWindow::slot_btnStop__clicked);
    }

    // 聲明隨機(jī)數(shù)種子,不然就是偽隨機(jī)(每次產(chǎn)生的隨機(jī)數(shù)都一樣)
    qsrand(QTime(0, 0, 0).secsTo(QTime::currentTime()));
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::slot_actQuit_triggered()
{
    close();
}
void MainWindow::slot_btnStart_clicked()
{
	// 此處可先判斷定時(shí)器是否處于活動(dòng)狀態(tài),如果是,則返回;否則,再啟動(dòng)
	// ToDoSomething
	{
	
	}
    m_pTimer->start(100);
}

void MainWindow::slot_btnStop__clicked()
{
    m_pTimer->stop();
    // 顯示最終獲獎(jiǎng)結(jié)果
    QString strRes = QString("最終結(jié)果: %1").arg(ui->label_turn->text());
    ui->label_res->setText(strRes);
}

void MainWindow::slot_timeout()
{
    QStringList sl;
    sl << "一等獎(jiǎng)" << "二等獎(jiǎng)" << "三等獎(jiǎng)" << "四等獎(jiǎng)" << "五等獎(jiǎng)";
    int nRange = qrand() % 5;
    ui->label_turn->setText(sl.at(nRange));
}

  • 實(shí)現(xiàn)思路
    – 點(diǎn)擊"開始",啟動(dòng)定時(shí)器
    – “定時(shí)器"實(shí)現(xiàn)界面刷新
    – 點(diǎn)擊"結(jié)束”,停止定時(shí)器,并將結(jié)果顯示
3. 基于線程
  • 實(shí)現(xiàn)思路(等之后發(fā)布線程文章后,實(shí)現(xiàn))
    – 在主窗口創(chuàng)建一個(gè)線程對(duì)象
    – 點(diǎn)擊"開始",將信號(hào)發(fā)送到線程中,用于更新幾等獎(jiǎng)
    – 線程將更新后的信息發(fā)送到主窗口
    – 主窗口動(dòng)態(tài)顯示
    – 點(diǎn)擊"結(jié)束",停止線程,顯示結(jié)果

go.文章來源地址http://www.zghlxwxcb.cn/news/detail-727040.html

到了這里,關(guān)于【Qt】三種方式實(shí)現(xiàn)抽獎(jiǎng)小游戲的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • QT-貪吃小游戲

    QT-貪吃小游戲

    https://download.csdn.net/download/u013083044/88758860

    2024年01月19日
    瀏覽(24)
  • QT-QML2048小游戲

    QT-QML2048小游戲

    https://download.csdn.net/download/u013083044/88758829

    2024年01月19日
    瀏覽(20)
  • Unity學(xué)習(xí)記錄:制作雙屏垃圾分類小游戲

    Unity學(xué)習(xí)記錄:制作雙屏垃圾分類小游戲

    要實(shí)現(xiàn)的功能 游戲操作 在規(guī)定時(shí)間內(nèi),垃圾通過拖拽進(jìn)入正確垃圾桶的容器,垃圾在這里消失,飛入第二個(gè)屏上對(duì)應(yīng)垃圾桶的位置并實(shí)現(xiàn)加分和加時(shí)間的效果,垃圾拖拽進(jìn)入不正確的垃圾桶,垃圾會(huì)返回到原來的位置,同時(shí),相應(yīng)的時(shí)間也會(huì)減少 勝利和失敗的條件: 勝利:

    2024年02月03日
    瀏覽(19)
  • 使用QT制作貪吃蛇小游戲(含登錄注冊(cè)界面)

    使用QT制作貪吃蛇小游戲(含登錄注冊(cè)界面)

    login.h register.h user.h userlist.h widget.h login.cpp main.cpp register.cpp user.cpp userlist.cpp widget.cpp login.ui register.ui widget.ui

    2024年02月13日
    瀏覽(21)
  • Unity項(xiàng)目轉(zhuǎn)微信小游戲踩坑記錄

    Unity項(xiàng)目轉(zhuǎn)微信小游戲踩坑記錄

    1.首先 你需要去他的SDK地址,去下載SDK,并瀏覽一下相關(guān)流程內(nèi)容 ? ? ? 這個(gè)SDK現(xiàn)在沒有一個(gè)長(zhǎng)期穩(wěn)定的版本,基本三天一小更,五天一大更。所以你懂的,更新之前好好看看更新的內(nèi)容在決定。 2.webgl不支持多線程,Socket,同步加載。如果項(xiàng)目用到比較多的這些內(nèi)容,工作

    2024年02月09日
    瀏覽(23)
  • Unity微信小游戲使用微信云開發(fā)記錄

    Unity微信小游戲使用微信云開發(fā)記錄

    最近項(xiàng)目上架微信小游戲,首先使用了微信官方sdk轉(zhuǎn)成微信小游戲,官方地址如下: https://github.com/wechat-miniprogram/minigame-unity-webgl-transform 官方給了各種指導(dǎo),雖然都有但是都不太精哈哈 因?yàn)橐雠判邪瘢拼鏅n,而我司沒服務(wù)器,那只能用微信云開發(fā)了。具體開通啥的初始

    2023年04月09日
    瀏覽(31)
  • python小游戲 拼圖小游戲設(shè)計(jì)與實(shí)現(xiàn)

    python小游戲 拼圖小游戲設(shè)計(jì)與實(shí)現(xiàn)

    ?? Hi,各位同學(xué)好呀,這里是L學(xué)長(zhǎng)! ??今天向大家分享一個(gè)今年(2022)最新完成的畢業(yè)設(shè)計(jì)項(xiàng)目作品 python小游戲畢設(shè) 拼圖小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼) ?? 學(xué)長(zhǎng)根據(jù)實(shí)現(xiàn)的難度和等級(jí)對(duì)項(xiàng)目進(jìn)行評(píng)分(最低0分,滿分5分) 難度系數(shù):3分 工作量:3分 創(chuàng)新點(diǎn):4分 游戲規(guī)則: 將圖像

    2024年02月08日
    瀏覽(27)
  • python小游戲 2048小游戲設(shè)計(jì)與實(shí)現(xiàn)

    python小游戲 2048小游戲設(shè)計(jì)與實(shí)現(xiàn)

    ?? Hi,各位同學(xué)好呀,這里是L學(xué)長(zhǎng)! ??今天向大家分享一個(gè)今年(2022)最新完成的畢業(yè)設(shè)計(jì)項(xiàng)目作品 python小游戲畢設(shè) 2048小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼) ?? 學(xué)長(zhǎng)根據(jù)實(shí)現(xiàn)的難度和等級(jí)對(duì)項(xiàng)目進(jìn)行評(píng)分(最低0分,滿分5分) 難度系數(shù):3分 工作量:3分 創(chuàng)新點(diǎn):4分 今天我們用python實(shí)現(xiàn)

    2024年02月11日
    瀏覽(19)
  • python小游戲 消消樂小游戲設(shè)計(jì)與實(shí)現(xiàn)

    python小游戲 消消樂小游戲設(shè)計(jì)與實(shí)現(xiàn)

    ?? Hi,各位同學(xué)好呀,這里是L學(xué)長(zhǎng)! ??今天向大家分享一個(gè)今年(2022)最新完成的畢業(yè)設(shè)計(jì)項(xiàng)目作品 python小游戲畢設(shè) 消消樂小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼) ?? 學(xué)長(zhǎng)根據(jù)實(shí)現(xiàn)的難度和等級(jí)對(duì)項(xiàng)目進(jìn)行評(píng)分(最低0分,滿分5分) 難度系數(shù):3分 工作量:3分 創(chuàng)新點(diǎn):4分 利用python制作的

    2024年02月01日
    瀏覽(28)
  • python小游戲 打地鼠小游戲設(shè)計(jì)與實(shí)現(xiàn)

    python小游戲 打地鼠小游戲設(shè)計(jì)與實(shí)現(xiàn)

    ?? Hi,各位同學(xué)好呀,這里是L學(xué)長(zhǎng)! ??今天向大家分享一個(gè)今年(2022)最新完成的畢業(yè)設(shè)計(jì)項(xiàng)目作品 python小游戲畢設(shè) 打地鼠小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼) ?? 學(xué)長(zhǎng)根據(jù)實(shí)現(xiàn)的難度和等級(jí)對(duì)項(xiàng)目進(jìn)行評(píng)分(最低0分,滿分5分) 難度系數(shù):3分 工作量:3分 創(chuàng)新點(diǎn):4分 打地鼠的游戲規(guī)

    2024年02月06日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包