文章目录
一、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);
}