qt--电子相册

一、项目要求

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

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

要求:界面美观

二、项目代码

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

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

cpp 复制代码
//头文件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_OBJECT

public:
    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
cpp 复制代码
//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()<<"随机";
}

三、项目效果

相关推荐
自不量力的A同学2 分钟前
PHP 8.5.6 发布
开发语言·php
基德爆肝c语言7 分钟前
Qt控件:按钮类
开发语言·qt
茉莉玫瑰花茶9 分钟前
LangGraph 入门教程:构建 AI 工作流 [ 案例二 ]
开发语言·人工智能·python
yaoxin52112310 分钟前
403. Java 文件操作基础 - 写入二进制文件
java·开发语言·python
爱喝水的鱼丶13 分钟前
SAP-ABAP:ABAP Development Tools(ADT)安装配置学习分享教程(四篇连载) 第二篇:ADT客户端完整安装与初始配置教程
运维·开发语言·学习·sap·abap
AKA__Zas21 分钟前
初识多线程(2.0)
java·开发语言·学习方法
叼烟扛炮21 分钟前
C++ 知识点19 匿名对象
开发语言·c++·算法·匿名对象
0xDevNull24 分钟前
Java十道高频面试题(二)
java·开发语言
叼烟扛炮26 分钟前
C++ 知识点23 类模板
开发语言·c++·算法·类模版
xlq2232228 分钟前
53.tcp socket
linux·服务器·开发语言·网络·网络协议·tcp/ip