QT实现电子相册

使用带有UI界面的QWidget实现电子相册

1、实现功能

1、定时器的使用,在当前页面的停止总时长。

2、显示当前时间

3、图片的上一张与下一张

4、图片的显示

5、进度展示、一共十张图片、进度条的初始值为10。

2、widget.h

复制代码
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QDateTime>
#include <QLabel>
#include <QTimer>
#include<QStringList>
#include<QtDebug>
#include<QMessageBox>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

public slots://自己新增的槽函数是public
    void update_text();
    void update_time();

//UI界面,新增的槽函数是private
private slots:
    void on_down_btn_clicked();

    void on_up_btn_clicked();

private:
    Ui::Widget *ui;
    QTimer *time;//当前时间,定时器对象

    QTimer *timer;//定时器对象,计时器
    QTime *time1;//时间对象,时分秒,计时器

    QStringList imageList;
    int index;
};
#endif // WIDGET_H

3、widget.cpp

复制代码
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //1.实现当前时间
    this->time = new QTimer(this);//定时器的实例化
    this->time->setInterval(1000);//设置时长、毫秒
    //信号和槽函数的关联,要在启动之前,先关联好,QT5
    connect(this->time,&QTimer::timeout,this,&Widget::update_time);
    this->time->start();//启动定时器

    //2.实现计时器
    this->timer = new QTimer(this);
    //this->time1 = new QTime(0,0,0);//设计时间的初始值,从零开始,是按秒更新
    this->time1 = new QTime(0,0,0,0);//设计时间的初始值,从零开始,是按毫秒更新
    //this->timer->start(1000);//1000毫秒是1秒,这个是按秒更新
    this->timer->start(1);//多久启动一次,单位是毫秒,这个是按1毫秒更新

    //QT4的连接
    connect(this->timer,SIGNAL(timeout()),this,SLOT(update_text()));//槽函数要另外定义,private slots:

    //3.图片展示
    this->ui->img_lab->setPixmap
            (QPixmap("./image/0.jpg").scaled(this->ui->img_lab->size()));

    imageList  << "./image/0.jpg" << "./image/1.jpg"<< "./image/2.jpg"<< "./image/3.jpg"<< "./image/4.jpg"
               << "./image/5.jpg"<< "./image/6.jpg"<< "./image/7.jpg"<< "./image/8.jpg"<< "./image/9.jpg";
    index=0;

    //4.进度条显示
    this->ui->progressBar->setRange(0,100);//先给进度条设置范围
    this->ui->progressBar->setValue(10);//再设置初始值
}

Widget::~Widget()
{
    delete ui;
}

void Widget::update_time()
{
    //获取当前的系统时间
    QString time = QDateTime::currentDateTime().toString("yyyy年MM月dd日 hh:mm:ss");
    //给标签设置时间
    this->ui->loctime_lab->setText(time);
}

void Widget::update_text()
{

    //*this->time1=this->time1->addSecs(1);//秒
    *this->time1=this->time1->addMSecs(1);//毫秒

    //this->ui->counttime_lab->setText(this->time1->toString("hh:mm:ss"));//使用标签完成时间的显示,不太合适

    //使用QLCDNumber完成时间的显示,更符合场景
    //this->ui->lcdNumber->display(this->time1->toString("hh:mm:ss"));//秒
    this->ui->lcdNumber->display(this->time1->toString("hh:mm:ss:zzz"));//毫秒
}

void Widget::on_down_btn_clicked()
{
    if(index<9)
    {
        index = (index + 1) % imageList.size(); // 循环显示图片
        QPixmap pixmap(imageList.at(index));
        pixmap = pixmap.scaled(ui->img_lab->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation);
        ui->img_lab->setPixmap(pixmap);
        //进度条大小
        this->ui->progressBar->setValue((index+1)*10);
    }
    else
    {
        QMessageBox::warning(this, "提示", "已经是最后一张了");
    }


}


void Widget::on_up_btn_clicked()
{
    if(index>0)
    {
        index = (index - 1) % imageList.size(); // 循环显示图片
        QPixmap pixmap(imageList.at(index));
        pixmap = pixmap.scaled(ui->img_lab->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation);
        ui->img_lab->setPixmap(pixmap);
        //进度条大小
        this->ui->progressBar->setValue((index+1)*10);

    }
    else
    {
        QMessageBox::information(this, "提示", "已经是第一张了");
    }
    //三种关联方式:QT5、QT4、匿名函数
//    connect(this->time,&QTimer::timeout,this,&Widget::update_time);
//    connect(this->timer,SIGNAL(timeout()),this,SLOT(update_text()));

}

4、widget.ui

相关推荐
wjs20242 小时前
状态模式(State Pattern)
开发语言
我命由我123452 小时前
Kotlin 数据容器 - List(List 概述、创建 List、List 核心特性、List 元素访问、List 遍历)
java·开发语言·jvm·windows·java-ee·kotlin·list
liulilittle2 小时前
C++ TAP(基于任务的异步编程模式)
服务器·开发语言·网络·c++·分布式·任务·tap
励志要当大牛的小白菜4 小时前
ART配对软件使用
开发语言·c++·qt·算法
爱装代码的小瓶子6 小时前
数据结构之队列(C语言)
c语言·开发语言·数据结构
Maybe_ch7 小时前
.NET-键控服务依赖注入
开发语言·c#·.net
超浪的晨7 小时前
Java UDP 通信详解:从基础到实战,彻底掌握无连接网络编程
java·开发语言·后端·学习·个人开发
终焉暴龙王7 小时前
CTFHub web进阶 php Bypass disable_function通关攻略
开发语言·安全·web安全·php
Edingbrugh.南空8 小时前
Aerospike与Redis深度对比:从架构到性能的全方位解析
java·开发语言·spring
CodeCraft Studio9 小时前
借助Aspose.HTML控件,在 Python 中将 HTML 转换为 Markdown
开发语言·python·html·markdown·aspose·html转markdown·asposel.html