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()
{
}
相关推荐
重生之我是数学王子9 分钟前
QT基础 编码问题 定时器 事件 绘图事件 keyPressEvent QT5.12.3环境 C++实现
开发语言·c++·qt
----云烟----9 小时前
QT中QString类的各种使用
开发语言·qt
「QT(C++)开发工程师」15 小时前
【qt版本概述】
开发语言·qt
一路冰雨19 小时前
Qt打开文件对话框选择文件之后弹出两次
开发语言·qt
老赵的博客20 小时前
QT 自定义界面布局要诀
开发语言·qt
码码哈哈0.020 小时前
VSCode 2022 离线安装插件QT VSTOOl报错此扩展不能安装在任何当前安装的产品上。
ide·vscode·qt
feiyangqingyun1 天前
Qt/C++离线地图的加载和交互/可以离线使用/百度和天地图离线/支持手机上运行
c++·qt·qt天地图·qt离线地图·qt地图导航
gz94562 天前
windows下,用CMake编译qt项目,出现错误By not providing “FindQt5.cmake“...
开发语言·qt
「QT(C++)开发工程师」2 天前
Ubuntu 26.04 LTS 大升级:Qt 6 成为未来新引擎
qt
兆。2 天前
python实战案例----使用 PyQt5 构建简单的 HTTP 接口测试工具
爬虫·python·qt