基于QT的电子相册设计与实现

大家好,很高心可以给大家分享一下我作为初学者的学习历程,今天我给大家讲的是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();
}

做好就如下:
这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值