文章目录
图片浏览系统/抽奖系统
源码分享
链接:https://pan.baidu.com/s/1p2X3Qr5iX1JomMvRX_oD3A
提取码:qwer
效果演示图
代码分析
注释已经很详细了 会先进行说明再贴代码
布局操作,按钮放置等不多赘述
对于图片展示的实现,先用一个字符串列表进行地址储存和一个整型进行访问位置的记录
下一张和上一张的实现 每次点击 进行整型的+1,同时字符串列表存的地址下标展示图片 上一张同理
对于依次展示 点击开始后 按照传给定时器的时间进行 下一张操作的重复即可
对于随机展示 点击开始后 按照传给定时器的时间进行 用随机数操作范围地址下标展示图片即可
这里是对于开始按钮的操作解析
布尔型进行按键状态的判断
false时 将100毫秒发送给定时器 并把按钮的开始变为停止
true时 定时器停止 并把按钮的停止变为开始
这里的取反操作 是为了下一次点击操作的实现
static bool flag = 0;
if(flag){
tm->start(100);
ks->setText("停止");
}
else{
tm->stop();
ks->setText("开始");
}
flag = !flag;
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QLabel>
#include <QPushButton>
#include <QStringList>
#include <QTimer>
class Widget : public QWidget
{
Q_OBJECT
public slots:
//显示上一页
void show_up();
//显示下一页
void show_down();
//滚动显示
//void show_roll();
//抽奖模式
void show_random();
//随机
void show_RD();
public:
//图片展示框
QLabel *tp;
//按钮
QPushButton *xz;
QPushButton *syz;
QPushButton *ks;
QPushButton *xyz;
int place;//用于访问下标
QStringList path;//存放图片的路径
QTimer *tm;//定时器,控制随机的速度
Widget(QWidget *parent = nullptr);
~Widget();
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include <QGridLayout> //网格布局
#include <QFileDialog>//文件对话框
#include<QRandomGenerator>
void Widget::show_up()
{
place --;
if(place == -1){
place = path.size() - 1;
}
tp->setPixmap(QPixmap(path[place]));
}
void Widget::show_down()
{
place ++;
if(place == path.size()){
place = 0;
}
tp->setPixmap(QPixmap(path[place]));
}
//随机抽奖模式
void Widget::show_random()
{
static bool flag = 0;
if(flag == 0){
tm->start(100);
ks->setText("停止");
}
else{
tm->stop();
ks->setText("开始");
}
flag = !flag;
}
void Widget::show_RD()
{
tp->setPixmap(QPixmap(path[QRandomGenerator::global()->bounded(path.size())]));//根据范围生产随机数
}
//滚动显示
/*void Widget::show_roll()
{
static bool flag = 0;
if(flag == 0){
tm->start(100);
ks->setText("停止");
}
else{
tm->stop();
ks->setText("开始");
}
flag = !flag;
}*/
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
QGridLayout *TP = new QGridLayout;//网格布局
place = 0;//初始化访问的位置
tm = new QTimer; //定时器
tp = new QLabel;//图片显示框
tp->setMinimumSize(248, 248);
tp->setScaledContents(true);
//按钮
xz = new QPushButton("选择图片");
syz = new QPushButton("上一张");
ks = new QPushButton("开始");
xyz = new QPushButton("下一张");
//点击选择图片功能
//QFileDialog::getOpenFileNames()
//函数的第一个参数是指定文件对话框的父窗口,这里传入了 this,表示当前窗口是该对话框的父窗口。
//第二个参数是对话框的标题,即 "打开图片",第三个参数是对话框打开时显示的默认目录,这里传入
//"." 表示当前目录。最后一个参数是对话框所允许的文件类型过滤器,
//这里只允许选择扩展名为 .png、.xpm 或 .jpg 的图片文件。
connect(xz,&QPushButton::clicked,[&](){
QStringList tp_path = QFileDialog::getOpenFileNames(this, "选择奖品", ".", "Images (*.png *.xpm *.jpg)");
path += tp_path;
place ++;
});
//点击上一张
connect(syz,&QPushButton::clicked,this,&Widget::show_up);
//点击下一张
connect(xyz,&QPushButton::clicked,this,&Widget::show_down);
//点击开始 滚动显示
//connect(ks,&QPushButton::clicked,this,&Widget::show_roll);
//定时器 点击开始后根据下一张的操作进行展示
//connect(tm,&QTimer::timeout,this,&Widget::show_down);
//随机模式
connect(ks,&QPushButton::clicked,this,&Widget::show_random);
//定时器 点击开始后的随机进行展示
connect(tm,&QTimer::timeout,this,&Widget::show_RD);
//布局
TP->addWidget(tp,0,0,1,5);
TP->addWidget(xz,1,0,1,1);
TP->addWidget(syz,1,1,1,1);
TP->addWidget(ks,1,2,1,1);
TP->addWidget(xyz,1,3,1,1);
this->setWindowTitle("抽奖咯");
setLayout(TP);
}
Widget::~Widget()
{
}