当前位置:网站首页>Qt入门(六)——抽奖系统的实现
Qt入门(六)——抽奖系统的实现
2022-08-10 23:40:00 【光追雨】
一、ui设计
1.1 图像展示
1.2 类名定义
二、代码展示
2.1 MainWindow.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QIcon>
#include <QMessageBox>
#include <QPainter>
#include <QPixmap>
#include <QPoint>
#include <QMouseEvent>
#define TITLE_MOVE_HIGHT 200
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
void timerEvent(QTimerEvent *e); //时间事件函数
void paintEvent(QPaintEvent *e); //画布背景函数
void mousePressEvent(QMouseEvent *e); //判断鼠标按压
void mouseMoveEvent(QMouseEvent *e); //判断鼠标拖拽
void mouseReleaseEvent(QMouseEvent *e); //判断鼠标是否松开
~Widget();
private slots:
void on_StartButton_clicked(); //开始按钮
void on_CloseButton_clicked(); //退出按钮
private:
bool m_pressing; //鼠标是否正在按压——标志位
QPoint m_startPosition; //获取鼠标刚开始按压时,鼠标在全局的位置信息
QPoint m_framePosition; //获取鼠标刚开始按压时,窗口(左上角)的位置信息
private:
Ui::Widget *ui;
bool m_Drawing; //判断是否正在抽奖
int myTimerId; //确定时间ID
QStringList m_listNum; //定义待抽奖名单
int m_CurPos; //定义名单索引
QPixmap m_pix; //定义背景图片
};
#endif // WIDGET_H
2.2 main.cpp
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
2.3 MainWindow.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
m_pressing = false;
m_Drawing = false;
//不显示标题栏
this->setWindowFlags(Qt::Window|Qt::FramelessWindowHint);
m_pix.load("C:/Users/DELL/Desktop/lottery/img/background.jpg");
ui->listWidget->setStyleSheet("background:gray");
ui->StartButton->setIcon(QIcon("C:/Users/DELL/Desktop/lottery/img/start.jpg"));
ui->CloseButton->setStyleSheet("QPushButton{border-image: url(C:/Users/DELL/Desktop/lottery/img/close1.jpg);}"
"QPushButton:hover{border-image: url(C:/Users/DELL/Desktop/lottery/img/close2.jpg);}"
"QPushButton:pressed{border-image: url(C:/Users/DELL/Desktop/lottery/img/close3.jpg);}");
m_listNum.push_back("吃饭");
m_listNum.push_back("睡觉");
m_listNum.push_back("打游戏");
m_listNum.push_back("锻炼");
m_listNum.push_back("运动");
m_listNum.push_back("跑步");
m_listNum.push_back("读书");
m_listNum.push_back("深度之眼");
m_listNum.push_back("进程间通信");
}
Widget::~Widget()
{
delete ui;
}
void Widget::timerEvent(QTimerEvent *e)
{
if(myTimerId == e->timerId())
{
m_CurPos++;
if(m_listNum.size() - 1 <= m_CurPos)
{
m_CurPos = 0;
}
if(0 == m_listNum.size())
{
killTimer(myTimerId);
m_Drawing = false;
ui->StartButton->setIcon(QIcon("C:/Users/DELL/Desktop/lottery/img/start.jpg"));
QMessageBox::warning(this,"温馨提示","已经抽完了");
return;
}
ui->Listlabel->setText(m_listNum.at(m_CurPos));
}
}
void Widget::on_StartButton_clicked()
{
if(!m_Drawing)
{
m_Drawing = true;
ui->StartButton->setIcon(QIcon("C:/Users/DELL/Desktop/lottery/img/close1.jpg"));
myTimerId = this->startTimer(20);
}
else
{
m_Drawing = false;
ui->StartButton->setIcon(QIcon("C:/Users/DELL/Desktop/lottery/img/start.jpg"));
killTimer(myTimerId);
if(m_listNum.size() > 0)
{
QString strval = m_listNum.at(m_CurPos);
m_listNum.removeAt(m_CurPos);
ui->listWidget->addItem(new QListWidgetItem(strval));
}
}
}
void Widget::on_CloseButton_clicked()
{
if(QMessageBox::Yes == QMessageBox::question(this,"提示","你确定要退出此程序吗?",QMessageBox::Yes | QMessageBox::No))
{
this->close();
}
}
void Widget::paintEvent(QPaintEvent *e)
{
QPainter painter(this);
QRect rc = rect();
painter.drawPixmap(rc,m_pix);
}
void Widget::mousePressEvent(QMouseEvent *e) //判断鼠标按压
{
if(e->button() == Qt::LeftButton)
{
QRect rcTop = rect();
rcTop.setBottom(rcTop.top() + TITLE_MOVE_HIGHT);
if(rcTop.contains(e->pos()))
{
m_pressing = true;
m_startPosition = e->globalPos();
m_framePosition = frameGeometry().topLeft();
}
}
}
void Widget::mouseMoveEvent(QMouseEvent *e) //判断鼠标拖拽
{
if(e->buttons() == Qt::LeftButton)
{
if(m_pressing)
{
QPoint delta = e->globalPos() - m_startPosition;
move(m_framePosition + delta);
}
}
}
void Widget::mouseReleaseEvent(QMouseEvent *e) //判断鼠标是否松开
{
m_pressing = false;
}
三、成果展示
边栏推荐
猜你喜欢
随机推荐
Kubernetes 计算CPU 使用率
C language, operators of shift operators (> >, < <) explanation
ROS实验笔记之——安装QPEP以及Intel-MKL
【C语言】数据储存详解
9. Rest 风格请求处理
【C语言】C语言程序设计:动态通讯录(顺序表实现)
UOJ#749-[UNR #6]稳健型选手【贪心,分治,主席树】
CF1427F-Boring Card Game【贪心】
String
SQL injection base
定时器,同步API和异步API,文件系统模块,文件流
What is the ASIO4ALL
Kubernetes 维护技术分享
How to recover deleted files from the recycle bin, two methods of recovering files from the recycle bin
点云中的一些名词解释
2. 依赖管理和自动配置
Special class and type conversion
u盘数据不小心删除怎么恢复,u盘数据删除如何恢复
线程相关知识点
mysql索引,事务与存储引擎