大家好,很高心可以给大家分享一下我作为初学者的学习历程,今天我给大家讲的是QT的一个简单的项目——电子相册的设计与开发。做的不是太好,还请广大志同道合的猿友多多指正!
话不多说,老规矩,我就不给大家从QT的使用开始了,直接上代码。
先给大家看看ui界面的设计:
.pro文件没改动
widget.h文件如下:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QString>
#include <QLabel>
#include <QTimer>
#include <QFileDialog>
#include <QStringList>
#include <QDebug>
#include <QPixmap>
#include <QMatrix>
#include <QTextCodec>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private:
Ui::Widget *ui;
QLabel *label; // 定义标签用来显示图片
QTimer *timer; //定义时间变量用来设置定时器
QPixmap pix; //定义图片变量用来设置图片的属性
private slots:
void on_right_clicked(); //向右旋转按钮的槽函数
void on_left_clicked(); //向左旋转按钮的槽函数
void on_small_clicked(); //缩小按钮的槽函数
void on_big_clicked(); //放大按钮的槽函数
void on_back_clicked(); //返回按钮的槽函数
void on_stop_clicked(); //停止按钮的槽函数
void on_player_clicked(); //播放按钮的槽函数
void on_Speed_clicked(); //前进按钮的槽函数
void on_open_clicked(); //打开按钮的槽函数
void imageshow(); //自定义加载图片的槽函数
};
#endif // WIDGET_H
widget.cpp的代码如下:
#include "widget.h"
#include "ui_widget.h"
int i=0,j=0; //定义全局变量
QString imagelist[100]; //存放打开的图片
QStringList::iterator it; //连接器
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
label = new QLabel;
ui->scrollArea->setWidget(label); //将label放在scrollArea中
ui->scrollArea->setAlignment(Qt::AlignHCenter); //居中
timer = new QTimer(this);
connect(timer,SIGNAL(timeout()),this,SLOT(imageshow()));
setWindowTitle(tr("电子相册")); //程序名
}
Widget::~Widget()
{
delete ui;
}
void Widget::imageshow()
{
pix.load(imagelist[i]); //下载图片
pix = pix.scaled(label->width(),label->height(),Qt::KeepAspectRatio);
label->setPixmap(pix);
//label->update();
i++;
if(i>j)
{
i=0;
}
}
void Widget::on_open_clicked() //打开文件
{
int k = 0;
QStringList list = QFileDialog::getOpenFileNames(this,"select file","/","*.*");
for(it = list.begin();it<list.end();it++)
{
imagelist[k] = *it;
qDebug()<<imagelist[k];
k++;
}
j=k-1;
if(j<0)
{
j=0;
}
}
void Widget::on_Speed_clicked() //前进
{
timer->stop();
i=i+1;
if(i>j)
{
i=0;
}
pix.load(imagelist[i]);
pix.scaled(label->width(),label->height(),Qt::IgnoreAspectRatio);
//设置图片大小为Label的大小,否则就会出现滑动条
label->setPixmap(pix);//显示图片
}
void Widget::on_player_clicked() //播放
{
timer->start(1000);
}
void Widget::on_stop_clicked() //停止
{
timer->stop();
}
void Widget::on_back_clicked() //后退
{
timer->stop();
i=i-1;
if(i<0)
{
i=j;
}
pix.load(imagelist[i]);
label->setPixmap(pix);
}
void Widget::on_big_clicked() //放大
{
timer->stop();
double w = pix.width();
double h = pix.height();
pix = pix.scaled(w*1.2,h*1.2,Qt::KeepAspectRatio);
label->setPixmap(pix);
}
void Widget::on_small_clicked() //缩小
{
timer->stop();
double w = pix.width();
double h = pix.height();
pix = pix.scaled(w*0.8,h*0.8,Qt::KeepAspectRatio);
label->setPixmap(pix);
}
void Widget::on_left_clicked() //向左旋转
{
timer->stop();
QMatrix matrix;
matrix.rotate(90);
pix = pix.transformed(matrix,Qt::FastTransformation);
label->setPixmap(pix);
}
void Widget::on_right_clicked() //向右旋转
{
timer->stop();
QMatrix matrix;
matrix.rotate(-90);
pix = pix.transformed(matrix,Qt::FastTransformation);
label->setPixmap(pix);
}
main.cpp代码如下:
#include <QtGui/QApplication>
#include "widget.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));
Widget w;
w.show();
return a.exec();
}
做好就如下: