QT基础实践之图片浏览系统/抽奖系统

文章目录

图片浏览系统/抽奖系统

源码分享

链接: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()
{
}
相关推荐
躺着听Jay2 小时前
QT设置MySQL驱动
数据库·qt
范纹杉想快点毕业2 小时前
以项目的方式学QT开发(三)——超详细讲解(120000多字详细讲解,涵盖qt大量知识)逐步更新!
c语言·开发语言·c++·qt·mysql·算法·命令模式
机器视觉知识推荐、就业指导3 小时前
Qt/C++面试【速通笔记九】—视图框架机制
c++·笔记·qt
C++ 老炮儿的技术栈12 小时前
什么是函数重载?为什么 C 不支持函数重载,而 C++能支持函数重载?
c语言·开发语言·c++·qt·算法
名誉寒冰14 小时前
# KVstorageBaseRaft-cpp 项目 RPC 模块源码学习
qt·学习·rpc
xiaoyaoyou.xyz15 小时前
嵌入式Linux Qt开发:1、搭建基于ubuntu18.04的Qt开发环境及测试(解决Qt creator输入法问题)
linux·qt
小龙Guo18 小时前
QT+opencv实现卡尺工具找圆、拟合圆
开发语言·qt·opencv
破晓的历程20 小时前
Qt之Qfile类
开发语言·qt
feiyangqingyun1 天前
Qt/C++开发监控GB28181系统/录像文件查询/录像回放/倍速播放/录像文件下载
c++·qt·gb28181·录像回放·录像文件下载
忆源1 天前
【Qt】之音视频编程2:QtAV的使用篇
开发语言·qt·音视频