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()
{
}
相关推荐
用户805533698032 天前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
xcyxiner2 天前
DicomViewer (vcpkg Windows和ubuntu编译)7
qt
Quz7 天前
QML Hello World 入门示例
qt
xcyxiner10 天前
DicomViewer (dcmtk读取dcm文件)5
qt
xcyxiner10 天前
DicomViewer (后台线程处理文件)4
qt
xcyxiner11 天前
DicomViewer (添加模型类)3
qt
xcyxiner11 天前
DicomViewer (目录调整) 2
qt
xcyxiner11 天前
dcmtk vtk vtk-dicom(gdcm) 编译(debug) v2
qt
桥田智能13 天前
桥田智能 QT-650S:面向白车身焊装的 800kg 重载快换解决方案
开发语言·qt·系统架构
森G13 天前
75、服务器源码解析---------云视频服务项目
linux·服务器·网络·c++·qt