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 开发中的父类与父对象的区别和父对象传递:如何选择 `QWidget` 或 `QObject`?
java·开发语言·qt
誰能久伴不乏5 小时前
理解继承与组合的本质:Qt 项目中的设计选择指南
开发语言·qt
抠脚学代码10 小时前
Ubuntu18.6 学习QT问题记录以及虚拟机安装Ubuntu后的设置
qt·学习·ubuntu
小道士写程序20 小时前
Qt 5.12 上读取 .xlsx 文件(Windows 平台)
开发语言·windows·qt
yxc_inspire1 天前
基于Qt的app开发第十三天
c++·qt·app·tcp·面向对象
潇-xiao1 天前
Qt 按钮类控件(Push Button 与 Radio Button)(1)
c++·qt
追风赶月、1 天前
【QT】认识QT
开发语言·qt
溟洵1 天前
【C++ Qt】窗口(Qt窗口框架、菜单栏QMenuBar)
c++·qt
Wyn_1 天前
【QT】qtdesigner中将控件提升为自定义控件后,css设置样式不生效(已解决,图文详情)
开发语言·qt