(存在的BUG待处理:当按下两次start后照片的顺序会乱掉)
头文件:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QPixmap>
#include <QDir>
#include <QLabel>
#include <QDebug>
#include <QKeyEvent>
#include <QResizeEvent>
#include <QTimer>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
protected:
void resizeEvent(QResizeEvent *event);
private slots:
void on_pushButton_next_clicked();
void on_pushButton_prev_clicked();
void on_pushButton_start_clicked();
void on_pushButton_stop_clicked();
private:
Ui::Widget *ui;
QDir *dir;
QStringList files;
QStringList filters;
QLabel *label;
QTimer *timer;
int num;
int n;
};
#endif // WIDGET_H
cpp文件 :
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
label = new QLabel(ui->label);
dir = new QDir("/root/homework/20171026pic/test_pic");
timer = new QTimer(this);
filters << "*.jpg" << "*.bmp" << "*.png";
files = dir->entryList(filters,QDir::Files,QDir::Time);
num = 0;
ui->lcdNumber->display(num+1);
if (files.size() == 0)
{
return ;
}
label->resize(ui->label->size());
label->setScaledContents(true);
label->setPixmap(QPixmap(dir->path()+"/"+files[0]));
}
Widget::~Widget()
{
delete ui;
}
void Widget::resizeEvent(QResizeEvent *event)
{
label->resize(event->size());
}
void Widget::on_pushButton_next_clicked()
{
n = num;
if(files.size() <= 0)
{
return ;
}
n++ ;
if(n>=files.size())
{
n = 0;
}
if(n == num)
return ;
num = n;
label->setPixmap(QPixmap(dir->path()+"/"+files[n]));
ui->lcdNumber->display(num+1);
}
void Widget::on_pushButton_prev_clicked()
{
n = num;
if(files.size() <= 0)
{
return ;
}
n-- ;
if(n<0)
{
n = files.size()-1;
}
if(n == num)
return ;
num = n;
label->setPixmap(QPixmap(dir->path()+"/"+files[n]));
ui->lcdNumber->display(num+1);
}
void Widget::on_pushButton_start_clicked()
{
connect(timer,SIGNAL(timeout()),this,SLOT(on_pushButton_next_clicked()));
timer->start(1000);
ui->pushButton_start->setEnabled(false);
}
void Widget::on_pushButton_stop_clicked()
{
n=num;
timer->stop();
ui->pushButton_start->setEnabled(true);
}
界面展示: