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()<<"随机";
}

三、项目效果

相关推荐
掘根10 分钟前
【Qt】绘图
开发语言·qt
咖啡续命又一天30 分钟前
python 自动化采集 ChromeDriver 安装
开发语言·python·自动化
ajassi200033 分钟前
开源 C++ QT QML 开发(十一)通讯--TCP服务器端
c++·qt·开源
huohaiyu1 小时前
synchronized (Java)
java·开发语言·安全·synchronized
_OP_CHEN1 小时前
C++基础:(九)string类的使用与模拟实现
开发语言·c++·stl·string·string类·c++容器·stl模拟实现
蓝天智能1 小时前
QT MVC中View的特点及使用注意事项
开发语言·qt·mvc
木觞清2 小时前
喜马拉雅音频链接逆向实战
开发语言·前端·javascript
wuxuanok2 小时前
苍穹外卖 —— 公共字段填充
java·开发语言·spring boot·spring·mybatis
偷光2 小时前
浏览器中的隐藏IDE: Console (控制台) 面板
开发语言·前端·ide·php
LL_break3 小时前
线程1——javaEE 附面题
java·开发语言·面试·java-ee