【Qt】实现一个简易相册

1 篇文章 0 订阅


一、ui界面设计

UI设计如图所示:
UI设计图

最下面一行四个按钮的类为QPushbutton
显示当前第X张,共X张的标签类为QLabel,方便动态改变标签的值
中间部分显示图像,利用QLabel,利用setPixmap方法显示图片

使用到的对象和类如下图所示:

对象和类图


二、功能实现

1.导入资源

2.创建画布

利用QT下的QPixmap类,用于画布的创建
方法:创建一个新画布,在新画布下引入你需要的图片

//画布
    map = new QPixmap;
    //加载资源图片
    map->load(":/image_01/Image/"+QString::number(a)+".jpg");

3.利用Label展示照片

这一步比较简单。
方法:调用展示图片的label组件中的setPixmap来设置显示的照片,同时也设置一下label组件的其他属性。

//label标签自适应
    ui->label->setScaledContents(true);
    //居中显示
    ui->label->setAlignment(Qt::AlignCenter);
    //label标签显示图片
    ui->label->setPixmap(*map);

4.设置全局变量

方法:在对应的头文件声明即可,声明计时器timer,画布map,当前张数
a,总张数b,并将全局变量中张数和总张数的值赋值到对应组件显示的内容中,实现数据与组件的绑定。

album.h:

	private:   
    	int a;
    	int b;
    	//计时器
   	 	QTimer *timer;
    	//画布
    	QPixmap *map;

album.cpp:

	//初始化
    a=1;b=8;
    timer = new QTimer;
    //画布
    map = new QPixmap;

5.设置定时器

设置QTimer定时器,能够通过它的定时信号,实现每隔一段时间自动换图的功能。
方法:利用定时器的信号,利用信号槽,设置每隔一段时间改变a,b的数值

	//设定计时器
    timer->start(4000);
    //信号槽
    connect(timer,SIGNAL(timeout()),this,SLOT(showTime()));

6.定义槽函数中的实现方法

(1)轮播

利用全局变量a的自增,通过setText()方法,让当前张数的Label值发生变化,进而让显示图片的label中的画布发生变化,达到轮播图片的效果

//定时器 每隔一段时间换图
void Album::showTime()
{
    a++;
    //判断
    if(a>8) a=1;
    //qDebug()<<a;

    //显示当前信息
    ui->num1->setText(QString::number(a));
    ui->num2->setText(QString::number(b));

    map->load(":/image_01/Image/"+QString::number(a)+".jpg");
    //label标签显示图片
    ui->label->setPixmap(*map);
}

对于UI组件的四个按钮,通过在UI界面右键点击组件,再点击“转到槽”,选择clicked()信号,即可实现对应按钮的槽函数。

(2)点击上一张

//点击上一张 切换到上一张 如无操作则继续轮播
void Album::on_btn1_clicked()
{ 
    --a;
    //判断
    if(a<1) a=b-(-a);
	//先停止计时器 最后再开始
    timer->stop();
    //qDebug()<<a;
    map->load(":/image_01/Image/"+QString::number(a)+".jpg");
    //显示当前信息
    ui->num1->setText(QString::number(a));
    ui->num2->setText(QString::number(b));
    //label标签显示图片
    ui->label->setPixmap(*map);
    timer->start(4000);
}

(3)点击下一张

//点击下一张 切换到下一张 若无操作则继续轮播
void Album::on_btn2_clicked()
{
    ++a;
    //判断
    if(a>8) a=1;
	//先停止计时器 最后再开始
    timer->stop();
    qDebug()<<a;
    map->load(":/image_01/Image/"+QString::number(a)+".jpg");
    //显示当前信息
    ui->num1->setText(QString::number(a));
    ui->num2->setText(QString::number(b));
    //label标签显示图片
    ui->label->setPixmap(*map);
    timer->start(4000);
}

(4)停止轮播

//停止轮播
void Album::on_btn3_clicked()
{
    timer->stop();
}

(5)开始轮播

//开始轮播
void Album::on_btn4_clicked()
{
    timer->start(4000);
}

三、实现效果展示

展示

  • 4
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 20
    评论
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值