最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Qt5.9.5 隨機轉(zhuǎn)盤小項目的實現(xiàn)示例

 更新時間:2022年06月20日 08:34:12   作者:漁夫ciao  
本文主要介紹了Qt5.9.5隨機轉(zhuǎn)盤小項目的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言:

本文簡述:代碼中有點小bug(已經(jīng)粗暴解決),不提倡所有這類型bug都這樣解決

問題代碼段:

問題描述:由于超時信號造成槽函數(shù)形成了死循環(huán),也沒啥好的方案去替換。

//問題根源
connect(&rtTimer, SIGNAL(timeout()), this, SLOT(rtTimeoutSlot()));//調(diào)用超時信號,計時旋轉(zhuǎn)

//死循環(huán)部分
void LuckWard::rtTimeoutSlot(){
? ? rotationAngle++;//旋轉(zhuǎn)因子
?? ?if ((rotationAngle - randNumber) == 90)//當rotationAngle - randNumber==90°
?? ?{
?? ??? ?rtTimer.setInterval(10);//減速到10毫秒
?? ?}
?? ?else if ((rotationAngle - randNumber) == 180)//當rotationAngle - randNumber==180°
?? ?{
?? ??? ?rtTimer.setInterval(15);//減速到15毫秒
?? ?}
?? ?else if ((rotationAngle - randNumber) == 270)//當rotationAngle - randNumber==270°
?? ?{
?? ??? ?rtTimer.setInterval(20);//減速到20毫秒
?? ?}
?? ?else if ((rotationAngle - randNumber) == 360)//當rotationAngle - randNumber==360°
?? ?{
?? ??? ?rotationAngle--;//停下來
?? ??? ?i++;//(PS:由于此處不知道為啥進入了死循環(huán),只能加一個變量進行判斷)
?? ??? ?if (i == 1)//判斷是否是第一次
?? ??? ?{
?? ??? ??? ?emit luckOverSignal();//利用信號調(diào)用結(jié)束彈窗
?? ??? ?}
?? ?}
?? ?update();//更新數(shù)據(jù)
}

解決方法代碼段:

解決方法:在死循環(huán)內(nèi)添加了一個全局函數(shù)進行計數(shù),判斷是否是第一次。從而調(diào)用結(jié)束信號,彈出窗口。

頭文件處添加一個全局變量:

private:
    Ui::LuckWardClass ui;
    int i = 0;                  //記錄變量 

實現(xiàn)文件處添加一個“if”進行判斷

    //void LuckWard::rtTimeoutSlot()處代碼段
    else if ((rotationAngle - randNumber) == 360)//當rotationAngle - randNumber==360°
    {
        rotationAngle--;//停下來
    //解決方法:
        i++;//(PS:由于此處不知道為啥進入了死循環(huán),只能加一個變量進行判斷)
        if (i == 1)//判斷是否是第一次
        {
            emit luckOverSignal();//利用信號調(diào)用結(jié)束彈窗
        }
    }

源碼:

頭文件:luckward.h

#pragma once

#include <QtWidgets/QWidget>
#include "ui_luckward.h"
#include <QPainter>
#include <QDebug>
#include <QTimer>
#include <QMouseEvent>
#include <QTime>
#include <QMessageBox>
class LuckWard : public QWidget
{
?? ?Q_OBJECT

public:

?? ?LuckWard(QWidget *parent = Q_NULLPTR);
?? ?//重載繪制事件
?? ?void paintEvent(QPaintEvent *ev);
?? ?//重載鼠標按下事件
?? ?void mousePressEvent(QMouseEvent *ev);

?? ?public slots:
?? ?//計時旋轉(zhuǎn)函數(shù)
?? ?void rtTimeoutSlot();
?? ?//轉(zhuǎn)盤開始旋轉(zhuǎn)函數(shù)
?? ?void luckStartSlot();
?? ?//轉(zhuǎn)盤結(jié)束旋轉(zhuǎn)函數(shù)
?? ?void luckOverSlot();

signals:
?? ?//轉(zhuǎn)盤開始旋轉(zhuǎn)信號
?? ?void luckStartSignal();
?? ?//轉(zhuǎn)盤結(jié)束信號
?? ?void luckOverSignal();

private:
?? ?Ui::LuckWardClass ui;
?? ?int i = 0; ? ? ? ? ? ? ? ? ?//記錄變量?
?? ?QPainter rotationPainter; ? //繪畫轉(zhuǎn)盤
?? ?int rotationAngle; ? ? ? ? ?//旋轉(zhuǎn)角度
?? ?int randNumber; ? ? ? ? ? ? //隨機數(shù)
?? ?int EndNumber; ? ? ? ? ? ? ?//結(jié)束數(shù)值
?? ?QTimer rtTimer; ? ? ? ? ? ? //旋轉(zhuǎn)速度
?? ?QPainter pointPainter; ? ? ?//繪畫箭頭與釘子
};

UI文件:

/********************************************************************************
** Form generated from reading UI file 'luckward.ui'
**
** Created by: Qt User Interface Compiler version 5.9.5
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/

#ifndef UI_LUCKWARD_H
#define UI_LUCKWARD_H

#include <QtCore/QVariant>
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QHeaderView>
#include <QtWidgets/QWidget>

QT_BEGIN_NAMESPACE

class Ui_LuckWardClass
{
public:

? ? void setupUi(QWidget *LuckWardClass)
? ? {
? ? ? ? if (LuckWardClass->objectName().isEmpty())
? ? ? ? ? ? LuckWardClass->setObjectName(QStringLiteral("LuckWardClass"));
? ? ? ? LuckWardClass->resize(400, 400);
? ? ? ? LuckWardClass->setMinimumSize(QSize(400, 400));
? ? ? ? LuckWardClass->setMaximumSize(QSize(400, 400));

? ? ? ? retranslateUi(LuckWardClass);

? ? ? ? QMetaObject::connectSlotsByName(LuckWardClass);
? ? } // setupUi

? ? void retranslateUi(QWidget *LuckWardClass)
? ? {
? ? ? ? LuckWardClass->setWindowTitle(QApplication::translate("LuckWardClass", "LuckWard", Q_NULLPTR));
? ? } // retranslateUi

};

namespace Ui {
? ? class LuckWardClass: public Ui_LuckWardClass {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_LUCKWARD_H

主函數(shù):main.cpp

#include "luckward.h"
#include <QtWidgets/QApplication>

int main(int argc, char *argv[])
{
?? ?QApplication a(argc, argv);
?? ?LuckWard w;
?? ?w.show();
?? ?return a.exec();
}

實現(xiàn)文件:luckward.cpp

#include "luckward.h"

LuckWard::LuckWard(QWidget *parent)
?? ?: QWidget(parent)
{
?? ?ui.setupUi(this);
?? ?connect(&rtTimer, SIGNAL(timeout()), this, SLOT(rtTimeoutSlot()));//調(diào)用超時信號,計時旋轉(zhuǎn)
?? ?connect(this, SIGNAL(luckStartSignal()), this, SLOT(luckStartSlot()));//用luckStartSignal()發(fā)出的信號使轉(zhuǎn)盤開始旋轉(zhuǎn)
?? ?connect(this, SIGNAL(luckOverSignal()), this, SLOT(luckOverSlot()));//用luckOverSignal()發(fā)出的信號使轉(zhuǎn)盤結(jié)束后彈窗
}
void LuckWard::paintEvent(QPaintEvent *ev)
{
?? ?//繪制轉(zhuǎn)盤
?? ?rotationPainter.begin(this);//開始繪畫
?? ?rotationPainter.setRenderHint(QPainter::SmoothPixmapTransform);//抗鋸齒化
?? ?rotationPainter.translate(200, 200);//修改圖片中心點
?? ?rotationPainter.rotate(rotationAngle);//使圖片旋轉(zhuǎn)30°
?? ?rotationPainter.drawPixmap(-200, -200, 400, 400, QPixmap("luck.png"));//添加圖片
?? ?rotationPainter.end();//結(jié)束繪畫

?? ?//繪制箭頭
?? ?pointPainter.begin(this);//開始繪畫
?? ?pointPainter.setRenderHint(QPainter::SmoothPixmapTransform);
?? ?pointPainter.translate(200, 200);//設(shè)置繪制坐標位置
?? ?static const QPoint point[4] = { QPoint(0, 18), QPoint(20, 0), QPoint(0, -100), QPoint(-20, 0) };//繪制路徑
?? ?pointPainter.setBrush(QColor(Qt::blue));//設(shè)置箭頭顏色
?? ?pointPainter.drawPolygon(point, 4);
?? ?//繪制釘子(處于中間點)
?? ?QRect rectanle(-7, -7, 14, 18); //設(shè)置繪制坐標位置
?? ?pointPainter.setBrush(QColor(Qt::yellow));//設(shè)置釘子顏色
?? ?pointPainter.drawEllipse(rectanle);//繪制橢圓形
?? ?pointPainter.end();//結(jié)束繪畫
}
void LuckWard::rtTimeoutSlot()
{
?? ?rotationAngle++;//旋轉(zhuǎn)因子

?? ?if ((rotationAngle - randNumber) == 90)//當rotationAngle - randNumber==90°
?? ?{
?? ??? ?rtTimer.setInterval(10);//減速到10毫秒
?? ?}
?? ?else if ((rotationAngle - randNumber) == 180)//當rotationAngle - randNumber==180°
?? ?{
?? ??? ?rtTimer.setInterval(15);//減速到15毫秒
?? ?}
?? ?else if ((rotationAngle - randNumber) == 270)//當rotationAngle - randNumber==270°
?? ?{
?? ??? ?rtTimer.setInterval(20);//減速到20毫秒
?? ?}
?? ?else if ((rotationAngle - randNumber) == 360)//當rotationAngle - randNumber==360°
?? ?{
?? ??? ?rotationAngle--;//停下來
?? ??? ?i++;//(PS:由于此處不知道為啥進入了死循環(huán),只能加一個變量進行判斷)
?? ??? ?if (i == 1)//判斷是否是第一次
?? ??? ?{
?? ??? ??? ?emit luckOverSignal();//利用信號調(diào)用結(jié)束彈窗
?? ??? ?}
?? ?}
?? ?update();//更新數(shù)據(jù)
}

void LuckWard::mousePressEvent(QMouseEvent *ev)
{
?? ?if (ev->button() == Qt::LeftButton)//判斷是否鼠標左鍵按下
?? ?{
?? ??? ?qDebug() << "LeftButton Press" << ev->pos();//打印按下的位置
?? ??? ?//判斷是否在此范圍內(nèi)按下鼠標左鍵(x(180,220),y(216,130))
?? ??? ?if (ev->pos().x() > 180 && ev->pos().x() < 220 && ev->pos().y()<216 && ev->pos().y()>130)
?? ??? ?{
?? ??? ??? ?emit luckStartSignal();
?? ??? ?}
?? ?}
}
void LuckWard::luckStartSlot()
{
?? ?rtTimer.setInterval(50);//設(shè)置旋轉(zhuǎn)速度為50毫秒
?? ?rotationAngle = 1;//初始化旋轉(zhuǎn)角為1

?? ?qsrand(QTime(0, 0, 0).secsTo(QTime::currentTime()));//初始化隨機數(shù)
?? ?randNumber = qrand() % 360 + 180; ?//設(shè)置隨機數(shù)取值180 - >360之間
?? ?rtTimer.start(1);//定時器開始
}
void LuckWard::luckOverSlot()
{

?? ?qDebug() << "rotationAngle The Angle" << EndNumber;
?? ?if (EndNumber>0)
?? ?{
?? ??? ?QMessageBox::information(this, QString::fromLocal8Bit("提示"), QString::fromLocal8Bit("恭喜您!中獎了"), QStringLiteral("確定"));
?? ?}
}

ui界面布局樣式:

效果圖

到此這篇關(guān)于Qt 5.9.5 隨機轉(zhuǎn)盤小項目的文章就介紹到這了,更多相關(guān)Qt 5.9.5 隨機轉(zhuǎn)盤小項目內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談C語言中include

    淺談C語言中include""與include<>的區(qū)別

    C語言中包含文件有兩種包含符號,一個是<>尖括號,另一個是""雙引號。那么這兩個有什么區(qū)別呢?本文就詳細的介紹一下,感興趣的可以了解一下
    2021-06-06
  • C++ 類和對象基礎(chǔ)篇

    C++ 類和對象基礎(chǔ)篇

    類是創(chuàng)建對象的模板,一個類可以創(chuàng)建多個對象,每個對象都是類類型的一個變量;創(chuàng)建對象的過程也叫類的實例化。每個對象都是類的一個具體實例(Instance),擁有類的成員變量和成員函數(shù)
    2020-01-01
  • c語言中的移位運算符

    c語言中的移位運算符

    這篇文章主要介紹了c語言中的移位運算符,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • 如何優(yōu)雅地使用c語言編寫爬蟲

    如何優(yōu)雅地使用c語言編寫爬蟲

    如何優(yōu)雅地使用c語言編寫爬蟲,本文介紹cspider爬蟲庫,這個cspider爬蟲庫的使命在于,我們能夠使用c語言,依然能夠優(yōu)雅地編寫爬蟲程序,需要的朋友可以參考下
    2015-12-12
  • 深入探索C++中stack和queue的底層實現(xiàn)

    深入探索C++中stack和queue的底層實現(xiàn)

    這篇文章主要介紹了C++中的stack和dequeue的底層實現(xiàn),本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • C++實現(xiàn)學(xué)生信息管理系統(tǒng)(完整版)

    C++實現(xiàn)學(xué)生信息管理系統(tǒng)(完整版)

    這篇文章主要為大家詳細介紹了C++實現(xiàn)學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • 詳解進程同步與互斥機制

    詳解進程同步與互斥機制

    進程同步是一個操作系統(tǒng)級別的概念,是在多道程序的環(huán)境下,存在著不同的制約關(guān)系,為了協(xié)調(diào)這種互相制約的關(guān)系,實現(xiàn)資源共享和進程協(xié)作,從而避免進程之間的沖突,引入了進程同步
    2021-06-06
  • C++11利用原子操作實現(xiàn)自旋鎖

    C++11利用原子操作實現(xiàn)自旋鎖

    C++自旋鎖是一種低層次的同步原語,用于保護共享資源的訪問,這篇文章主要為大家介紹了如何利用原子操作實現(xiàn)自旋鎖,感興趣的小伙伴可以了解下
    2023-09-09
  • C語言數(shù)據(jù)結(jié)構(gòu)系列篇二叉樹的概念及滿二叉樹與完全二叉樹

    C語言數(shù)據(jù)結(jié)構(gòu)系列篇二叉樹的概念及滿二叉樹與完全二叉樹

    在上一章中我們正式開啟了對數(shù)據(jù)結(jié)構(gòu)中樹的講解,介紹了樹的基礎(chǔ)。本章我們將學(xué)習(xí)二叉樹的概念,介紹滿二叉樹和完全二叉樹的定義,并對二叉樹的基本性質(zhì)進行一個簡單的介紹。本章附帶課后練習(xí)
    2022-02-02
  • c語言:基于函數(shù)指針的兩個示例分析

    c語言:基于函數(shù)指針的兩個示例分析

    本篇文章是對c語言中函數(shù)指針的兩個示例做了詳細的分析介紹,需要的朋友參考下
    2013-05-05

最新評論

黄石市| 固始县| 乐都县| 新竹县| 余姚市| 邢台市| 浦东新区| 凉城县| 泰顺县| 桃江县| 古浪县| 佛坪县| 琼海市| 定兴县| 阜南县| 福鼎市| 高要市| 德安县| 云霄县| 南岸区| 渑池县| 湟中县| 台湾省| 北票市| 疏勒县| 石狮市| 石楼县| 贵定县| 屏东县| 闽侯县| 荃湾区| 施甸县| 奉化市| 永修县| 宣城市| 台南县| 罗平县| 牙克石市| 盐亭县| 正镶白旗| 阿巴嘎旗|