当前位置:网站首页>Introduction to Qt (6) - Implementation of the lottery system
Introduction to Qt (6) - Implementation of the lottery system
2022-08-11 00:02:00 【light chases rain】
一、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); //time event function
void paintEvent(QPaintEvent *e); //Canvas background function
void mousePressEvent(QMouseEvent *e); //Determine the mouse press
void mouseMoveEvent(QMouseEvent *e); //Determine the mouse drag
void mouseReleaseEvent(QMouseEvent *e); //Determine if the mouse is released
~Widget();
private slots:
void on_StartButton_clicked(); //开始按钮
void on_CloseButton_clicked(); //退出按钮
private:
bool m_pressing; //Whether the mouse is being pressed——标志位
QPoint m_startPosition; //Gets when the mouse just started pressing,The global position information of the mouse
QPoint m_framePosition; //Gets when the mouse just started pressing,窗口(左上角)的位置信息
private:
Ui::Widget *ui;
bool m_Drawing; //Determine if a lottery is in progress
int myTimerId; //确定时间ID
QStringList m_listNum; //Define the list to be drawn
int m_CurPos; //Define the list index
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,"温馨提示","already finished");
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,"提示","Are you sure you want to quit this program?",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) //Determine the mouse press
{
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) //Determine the mouse drag
{
if(e->buttons() == Qt::LeftButton)
{
if(m_pressing)
{
QPoint delta = e->globalPos() - m_startPosition;
move(m_framePosition + delta);
}
}
}
void Widget::mouseReleaseEvent(QMouseEvent *e) //Determine if the mouse is released
{
m_pressing = false;
}
三、成果展示
边栏推荐
猜你喜欢
Which foreign language journals and conferences can be submitted for software engineering/system software/programming language?
进程和线程
There is no recycle bin for deleted files on the computer desktop, what should I do if the deleted files on the desktop cannot be found in the recycle bin?
PMP每日一练 | 考试不迷路-8.10(包含敏捷+多选)
SQL注入基础
Dump file generation, content, and analysis
Excel English automatic translation into Chinese tutorial
10. Notes on receiving parameters
好用的翻译插件-一键自动翻译插件软件
Special class and type conversion
随机推荐
Promote the high-quality development of denim clothing
2. Dependency management and automatic configuration
“蔚来杯“2022牛客暑期多校训练营3 DF题解
分布式.性能优化
SAS data processing technology (1)
10. 接收参数相关注解
地下管廊可视化管理系统搭建
力扣每日一题-第52天-387. 字符串中的第一个唯一字符
【C语言】二分查找(折半查找)
高校就业管理系统设计与实现
进程和线程
How to quickly grasp industry opportunities and introduce new ones more efficiently is an important proposition
SQL注入基础
[Excel知识技能] 将文本型数字转换为数值格式
只会懒汉式和饿汉式 你还不懂单例模式!
ROS实验笔记之——安装QPEP以及Intel-MKL
开启新征程——枫叶先生第一篇博客
定时器,同步API和异步API,文件系统模块,文件流
Starting a new journey - Mr. Maple Leaf's first blog
[数据可视化] 图表设计原则