当前位置: 首页 > news >正文

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.lryc.cn/news/407751.html

相关文章:

  • 【MSP430】MSP430F5529几个定时器
  • 苍穹外卖(一)之环境搭建篇
  • 【限免】16PAM、16PSK、16QAM、16CQAM星座图及误码率【附MATLAB代码】
  • 09-软件易用性
  • FPGA开发——独立仿真和联合仿真
  • 基于STM32瑞士军刀--【FreeRTOS开发】学习笔记(二)|| 堆 / 栈
  • ABAP+从SAP发出去的PDF文件在第三方系统出现乱码
  • 基于springsecurity的会话并发处理功能(附代码)
  • Redis底层数据结构的实现
  • 制作excel模板,用于管理后台批量导入船舶数据
  • 领略诗词之妙,发觉生活之美。
  • 基于FFmpeg和SDL的音视频解码播放的实现过程与相关细节
  • SSIS_SQLITE
  • Redis 7.x 系列【27】集群原理之通信机制
  • 【五】MySql8基于m2芯片arm架构Ubuntu24虚拟机安装
  • 【Hot100】LeetCode—279. 完全平方数
  • 腾讯云开发者《中国数据库前世今生》有奖创作季
  • redis:清除缓存的最简单命令示例
  • 基于深度学习算法,支持再学习功能,不断提升系统精准度的智慧地产开源了。
  • Cmake生成的Xcode工程相对路径与绝对路径的问题
  • “机器说人话”-AI 时代的物联网
  • C#高级:数据库中使用SQL作分组处理3(ROW_NUMBER() 关键字)
  • 光明乳业:以科技赋能品质,引领乳业绿色新未来
  • Footprint Analytics 助力 Core 区块链实现数据效率突破
  • 从零搭建pytorch模型教程(八)实践部分(二)目标检测数据集格式转换
  • MYSQL(2) 高级查询
  • 小程序的运营方法:从入门到精通
  • 【优秀python算法毕设】基于python时间序列模型分析气温变化趋势的设计与实现
  • 掌握 Symfony 路由系统:配置与管理
  • OpenTeleVision复现及机器人迁移