qt--电子相册

一、项目要求

设计一个电子相册,点击上一张,切换到上一张图片,点击下一张,切换到下一张图片。

要求:图片的展示可以循环(QList<QString>)

要求:界面美观

二、项目代码

本质是通过添加图片进入到程序中,然后根据要求切换这些图片

在ui界面上设置四个pushbutton和一个Qlabel,按钮通过槽函数控制图片切换,Qlabel用来展示图片

//头文件dialog.h#ifndef DIALOG_H
#define DIALOG_H#include <QDialog>
#include <QPixmap>
#include <QSize>
#include<QList>
#include <QDebug>
#include <QTimer>
#include <QDateTime>
namespace Ui {
class Dialog;
}class Dialog : public QDialog
{Q_OBJECTpublic:explicit Dialog(QWidget *parent = 0);~Dialog();private:Ui::Dialog *ui;QTimer *timer;private slots:void btnClickSlot( );void btnClickSlot1( );void btnClickSlot2( );void btnClickSlot3( );void timeoutSlot();};#endif // DIALOG_H
//dialog.cpp
#include "dialog.h"
#include "ui_dialog.h"static int flag=1;
static int flag2=1;
int lastPic;QList<QString> alt;
Dialog::Dialog(QWidget *parent) :QDialog(parent),ui(new Ui::Dialog)
{ui->setupUi(this);QString s1(":/new/prefix1/1.png");QString s2(":/new/prefix1/2.png");QString s3(":/new/prefix1/3.png");QString s4(":/new/prefix1/4.png");QString s5(":/new/prefix1/5.png");QString s6(":/new/prefix1/6.png");QString s7(":/new/prefix1/7.png");QString s8(":/new/prefix1/8.png");QString s9(":/new/prefix1/9.png");QString s10(":/new/prefix1/10.png");QString s11(":/new/prefix1/11.png");QString s12(":/new/prefix1/12.png");alt.prepend(s1);// 向前追加alt.append(s2);// 向后追加alt.append(s3);// 向后追加alt.append(s4);// 向后追加alt.append(s5);// 向后追加alt.append(s6);// 向后追加alt.append(s7);// 向后追加alt.append(s8);// 向后追加alt.append(s9);// 向后追加alt.append(s10);// 向后追加alt.append(s11);// 向后追加alt.append(s12);// 向后追加connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(btnClickSlot()));connect(ui->pushButton_2,SIGNAL(clicked()),this,SLOT(btnClickSlot1()));connect(ui->pushButton_3,SIGNAL(clicked()),this,SLOT(btnClickSlot2()));connect(ui->pushButton_4,SIGNAL(clicked()),this,SLOT(btnClickSlot3()));QPixmap pic(alt.at(flag));QSize size(ui->label->width(),ui->label->height());pic =  pic.scaled(size,Qt::IgnoreAspectRatio,Qt::FastTransformation);ui->label->setPixmap(pic);timeoutSlot();// 创建定时器对象timer = new QTimer(this);// 设置触发时间timer->setInterval(50);// 设置为周期触发timer->setSingleShot(false);connect(timer,SIGNAL(timeout()),this,SLOT(timeoutSlot()));}Dialog::~Dialog()
{delete ui;
}
void Dialog::btnClickSlot()
{flag++;if(flag==6){flag=0;}qDebug()<<"右翻";QPixmap pic(alt.at(flag));QSize size(ui->label->width(),ui->label->height());pic =  pic.scaled(size,Qt::IgnoreAspectRatio,Qt::FastTransformation);ui->label->setPixmap(pic);}
void Dialog::btnClickSlot1()
{flag--;if(flag<0){flag=11;}qDebug()<<"左翻";QPixmap pic(alt.at(flag));QSize size(ui->label->width(),ui->label->height());pic =  pic.scaled(size,Qt::IgnoreAspectRatio,Qt::FastTransformation);ui->label->setPixmap(pic);}
//定时
void Dialog::timeoutSlot()
{flag++;if(flag==12){flag=0;}qDebug()<<"变化";QPixmap pic(alt.at(flag));QSize size(ui->label->width(),ui->label->height());pic =  pic.scaled(size,Qt::IgnoreAspectRatio,Qt::FastTransformation);ui->label->setPixmap(pic);}
//按钮切换
void Dialog::btnClickSlot2()
{flag2++;if(flag2>1){flag2=0;}if(flag2==0){timer->start();qDebug()<<"循环";ui->pushButton->setEnabled(false);ui->pushButton_2->setEnabled(false);ui->pushButton_4->setEnabled(false);ui->pushButton_3->setText("停止");}else if(flag2==1){qDebug()<<"单步";timer->stop();ui->pushButton->setEnabled(true);ui->pushButton_2->setEnabled(true);ui->pushButton_4->setEnabled(true);ui->pushButton_3->setText("自动");}}
//随机
void Dialog::btnClickSlot3()
{qint64 time=QDateTime::currentMSecsSinceEpoch();qsrand(time);int rand=qrand()%12;if(rand==lastPic){btnClickSlot3();}lastPic=rand;QPixmap pic(alt.at(rand));QSize size(ui->label->width(),ui->label->height());pic =  pic.scaled(size,Qt::IgnoreAspectRatio,Qt::FastTransformation);ui->label->setPixmap(pic);qDebug()<<"随机";
}

三、项目效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/50148.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mac中如何使用obs推流以及使用vlc播放

使用obs推流 1.打开obs&#xff0c;在“来源”框中->点加号->选择媒体源->选择本地ts文件 2.obs中->点击右下角设置->点直播->服务选自定义->服务器填写你的srt服务url&#xff0c;比如&#xff1a;srt://192.168.13.211:14000?modecaller 注意&#xff…

中小企业常见的网络安全问题及防范措施

在数字化浪潮的推动下&#xff0c;我国中小企业的信息化建设取得了显著成就。然而&#xff0c;随着网络安全形势的日益严峻&#xff0c;中小企业在网络安全方面的短板逐渐暴露出来。本文将从中小企业网络安全现状出发&#xff0c;深入剖析其存在的问题&#xff0c;并提出针对性…

概率论--矩估计

目录 简介 矩估计法的基本步骤 延伸 矩估计法在大样本情况下的准确性和有效性如何评估&#xff1f; 在实际应用中&#xff0c;矩估计法的局限性有哪些具体例子&#xff1f; 如何处理矩估计法在某些情况下可能出现的不合理解或无法唯一确定参数的问题&#xff1f; …

vue3前端开发-小兔鲜项目-form表单的统一校验

vue3前端开发-小兔鲜项目-form表单的统一校验&#xff01;实际上&#xff0c;为了安全起见&#xff0c;用户输入的表单信息&#xff0c;要满足我们的业务需求&#xff0c;参数类型等种种标准之后&#xff0c;才会允许用户向服务器发送登录请求。为此&#xff0c;有必要进行一次…

gstreamer使用cairo实现视频OSD叠加

前言 gstreamer中视频叠加OSD有很多种方式&#xff0c;比如textoverlay添加文字&#xff0c;gdkpixbufoverlay添加图片&#xff0c;clockoverlay或timeoverlay插件显示时间&#xff0c;pango插件进行复杂文本渲染&#xff0c;使用cairo插件绘制图形或者文字。 今天使用最后一…

【React】详解样式控制:从基础到进阶应用的全面指南

文章目录 一、内联样式1. 什么是内联样式&#xff1f;2. 内联样式的定义3. 基本示例4. 动态内联样式 二、CSS模块1. 什么是CSS模块&#xff1f;2. CSS模块的定义3. 基本示例4. 动态应用样式 三、CSS-in-JS1. 什么是CSS-in-JS&#xff1f;2. styled-components的定义3. 基本示例…

ADS 使用教程(二十八)Working with FEM Mesh Field Data in ADS

ADS 使用教程&#xff08;二十七&#xff09;Getting Started with Full 3D FEM Simulation in ADS 在这一节中&#xff0c;我们来谈论一下在ADS中处理有限元法&#xff08;FEM&#xff09;网格和场数据的步骤。 在上一节中&#xff0c;我们进行了FEM仿真&#xff0c;并保存了…

在 MinIO 使用 SVE 将 ARM 带入人工智能数据基础设施领域

MinIO 性能如此之高的原因之一是&#xff0c;我们做了其他人不会或不能做的细粒度工作。从 SIMD 加速到 AVX-512 优化&#xff0c;我们已经完成了艰巨的任务。ARM CPU 架构的最新发展&#xff0c;特别是可扩展矢量扩展 &#xff08;SVE&#xff09;&#xff0c;为我们提供了比前…

【微信小程序】微信小程序设置本地背景图片在真机无法显示的解决方案

微信小程序设置本地背景图片在真机无法显示的解决方案 在开发微信小程序时&#xff0c;很多开发者会遇到一个常见的问题&#xff1a;在调试环境中设置本地背景图片可以正常显示&#xff0c;但在真机上却无法显示。本文将详细探讨这一问题的原因&#xff0c;并提供三种解决方案…

《Cross-Modal Dynamic Transfer Learning for Multimodal Emotion Recognition》

Multi-modal系列论文研读目录 文章目录 Multi-modal系列论文研读目录1.ABSTRACT2.INDEX TERMS3.INTRODUCTION4.RELATED WORKSA. MULTIMODAL EMOTION RECOGNITION 多模态情感识别1) CONVENTIONAL FUSION METHODS 常规融合方法2) TRANSFORMER-BASED FUSION METHODS 基于变压器的融…

2023河南萌新联赛第(二)场 南阳理工学院

A. 国际旅行Ⅰ 题目&#xff1a; 思路&#xff1a; 因为题意上每个国家可以相互到达&#xff0c;所以只需要排序&#xff0c;输出第k小的值就可以了。 AC代码&#xff1a; #include<bits/stdc.h> #define int long long #define IOS ios::sync_with_stdio(0);cin.tie…

接口自动化测试如何灵活地验证动态变化的response返回数据

嗨&#xff0c;我是兰若&#xff0c;很多小伙伴在针对动态返回的response&#xff0c;不知道怎么断言&#xff0c;今天教给大家几种方式&#xff0c;可以在接口自动化测试时确保测试的有效性和灵活性&#xff1a; 1. 断言静态字段 首先&#xff0c;您可以断言一些静态字段的值…

JS中map()使用记录

优点和缺点 总的来说&#xff0c;map() 方法是一个强大的工具&#xff0c;适合于需要将数组中的每个元素转换为新形式的情况。然而&#xff0c;对于性能敏感的应用或需要更复杂控制逻辑的场景&#xff0c;可能需要考虑其他方法。 优点&#xff1a; 函数式编程风格&#xff1a…

2024 微信小程序 学习笔记 第二天

1. WXML 模板语法 数据绑定 事件绑定 条件渲染 列表渲染 2. WXSS 模板样式 rpx 样式导入 全局和局部样式 3. 全局配置 window tabBar 配置tabBar案例 4. 网络数据请求 Get请求 Post 请求 加载时请求 5. 案例 -本地生活&#xff08;首页&#xff09; 导航栏 轮播图 九宫格效果…

webpack插件给所有的:src文件目录增加前缀

1.webpack4的版本写法 class AddPrefixPlugin {apply(compiler) {compiler.hooks.compilation.tap(AddPrefixPlugin, (compilation) > {HtmlWebpackPlugin.getHooks(compilation).beforeEmit.tapAsync(AddPrefixPlugin,(data, cb) > {// 使用正则表达式替换所有包含 /st…

【C语言】用队列实现栈

用两个队列&#xff08;先进先出&#xff09;实现一个栈&#xff08;后进先出&#xff09; 题目链接&#xff1a;https://leetcode.cn/problems/implement-stack-using-queues/description/ 1.C语言首先要造一个队列出来 2.两个队列实现栈&#xff0c;始终保持一个队列为空&…

无人机之环保监控篇

随着科技的不断进步&#xff0c;无人机作为一种创新的技术手段&#xff0c;在环保监控领域发挥着越来越重要的作用。 一、覆盖范围广 无人机能够轻松覆盖广阔的地理区域&#xff0c;无论是偏远的山区、广袤的森林还是大型的工业园区。相比传统的地面检测方式&#xff0c;其不…

关于promise的一些例题(运行步骤详细说明)

关于promise的一些例题(详细说明) 基本例题 // 直接运行 输出 1 2 const promise new Promise((resolve, reject) > {console.log(1);resolve();console.log(2); });// then后面放入微队列 promise.then(() > {console.log(3); });// 输出4 之后没有代码了所以运行为队…

vue中无法调试

vue.config.js中增加 devtool configureWebpack: {name: name,resolve: {alias: {: resolve(src)}},devtool: "cheap-module-source-map" // add},然后重启即可。 顺便招聘&#xff1a;1.需要会日语。2.Java&#xff0c;JS&#xff0c;Vue&#xff0c;DB任一会者皆…

Greenplum数据库中常用的赋予和回收权限

一 赋予表级权限&#xff1a; 使用GRANT语句可以向用户或角色赋予对指定表的权限。以下是一些常见的表级权限及其示例语句&#xff1a; 1 SELECT权限&#xff1a; 允许用户查询表中的数据。 GRANT SELECT ON table_name TO user_name; 2 INSERT权限&#xff1a; 允许用户向表中…