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()
{
}
相关推荐
千册5 小时前
QT:QLabel的LED透明跑马灯
开发语言·qt
追烽少年x5 小时前
Qt中的异步相关类
qt
Fan_5585 小时前
007 Qt_按钮类控件
开发语言·qt
喵呜角角6 小时前
Qt Quick:ComboBox 组合框
开发语言·qt
gloomyfish6 小时前
【开发实战】QT5+ 工业相机 + OpenCV工作流集成演示
图像处理·深度学习·qt·opencv·计算机视觉
Fan_5587 小时前
008 Qt_显示类控件_QLabel
开发语言·qt
IT19958 小时前
Qt笔记-Qt Creator开发环境搭建
开发语言·笔记·qt
扶尔魔ocy8 小时前
【QT常用技术讲解】发送POST包(两种方式:阻塞方式及非阻塞方式)
qt·post·window开发
云空8 小时前
《Qt Creator 4.11.1 教程》
数据库·qt
7yewh10 小时前
嵌入式Linux QT+OpenCV基于人脸识别的考勤系统 项目
linux·开发语言·arm开发·驱动开发·qt·opencv·嵌入式linux