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

三、项目效果

相关推荐
等等54312 分钟前
Java EE初阶——wait 和 notify
java·开发语言
低代码布道师20 分钟前
第五部分:第一节 - Node.js 简介与环境:让 JavaScript 走进厨房
开发语言·javascript·node.js
盛夏绽放36 分钟前
Python字符串常用方法详解
开发语言·python·c#
好吃的肘子2 小时前
Elasticsearch架构原理
开发语言·算法·elasticsearch·架构·jenkins
nlog3n2 小时前
Go语言交替打印问题及多种实现方法
开发语言·算法·golang
kaixin_learn_qt_ing2 小时前
Golang
开发语言·后端·golang
ddd...e_bug2 小时前
Shell和Bash介绍
开发语言·bash
C4程序员3 小时前
Java百度身份证识别接口实现【配置即用】
java·开发语言
unityのkiven3 小时前
C++中的虚表和虚表指针的原理和示例
开发语言·c++
炒空心菜菜3 小时前
MapReduce 实现 WordCount
java·开发语言·ide·后端·spark·eclipse·mapreduce