QT实训-电子相册

QT实训-电子相册

  • 1.实现效果
  • 2.项目介绍
  • 3.实现代码
    • 1)代码布局
    • 2)ui布局
    • 3)代码
  • 4.代码主要功能解释

1.实现效果

QT实训-电子相册_第1张图片
QT实训-电子相册_第2张图片

QT实训-电子相册_第3张图片

2.项目介绍

功能一 : 实现了将实时时间放到QLCDNumber中
功能二 : 实现了图片的翻页功能

3.实现代码

1)代码布局

QT实训-电子相册_第4张图片

2)ui布局

QT实训-电子相册_第5张图片

3)代码

代码可参考如下三个,
同时,代码及资料我已上传到github网站:Qt C++ 实现电子相册
也可在github上进行查看.

1.widget.h如下

#ifndef WIDGET_H
#define WIDGET_H

#include 
#include 

//时间刷新
#include 
#include 

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

    //翻页
    int n;
    int page;
    QStringList strlist;

private:
    //实时时间
    //QLabel *label_;
    QTimer *timer_;

private:
    Ui::Widget *ui;
private slots:
    //实时时间
    void SltUpdateTime();
    void on_l_button_clicked();
    void on_r_button_clicked();
};
#endif // WIDGET_H

2.main.cpp如下

#include "widget.h"

#include 
#include 

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.setFixedSize(841,610);

    QFile file("F:\\QT_code\\1study\\flushbonading_Curriculum_design\\study/style.qss");//style.qss的绝对路径
    file.open(QFile::ReadOnly);
    QByteArray arr = file.readAll();
    a.setStyleSheet(arr);//a指的是整个应用程序,给a设置样式就是给全部设置
    file.close();

    w.show();
    return a.exec();
}

3.widget.cpp如下:

#include "widget.h"
#include "ui_widget.h"

#include 
#include 

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //设置图标
    setWindowIcon(QIcon(":/img/1.jpg"));
    //设置名字
    setWindowTitle("电子相册");

    //实时时间
    //(0,400,800,80); // 位置和大小
    //label_ = new QLabel(this);
    //label_->setStyleSheet("color:red ; background-color:rgb(0,0,0,0);");//前景色(指文字)是红色,背景色是白色
    //label_->setAlignment(Qt::AlignCenter);
    //label_->setGeometry(0,400,800,80);

    timer_ = new QTimer(this);
    timer_->start(1000);

    connect(timer_,&QTimer::timeout,this,&Widget::SltUpdateTime);
    
    n = 6;
    page = 1;
    for (int i = 0; i < n ; i++) {
        QString str;
        str = ":/img/"+QString::number(i+1)+".jpg";
        strlist.append(str);
    }
    QPixmap pix(strlist[page-1]);//":/img/1.jpg"
    ui->label->setScaledContents(true);
    ui->label->setPixmap(pix);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::SltUpdateTime(){
    QDateTime now = QDateTime::currentDateTime();
    QString time_str = now.toString("yyyy-MM-dd hh:mm:ss");
    ui->lcd->display(time_str);
}


void Widget::on_l_button_clicked()
{
    page--;
    if(page < 1)
    {
        page++;
        QMessageBox::information(this,"提示","已经是第一张了");
        qDebug()<<"已经是第一张了";
    }else
    {
        QPixmap pix(strlist[page-1]);
        ui->label->setPixmap(pix);
    }
    qDebug()<<page;
}

void Widget::on_r_button_clicked()
{
    page++;
    if(page > n)
    {
        page--;
        QMessageBox::information(this,"提示","已经是最后一张了");
        //QMessageBox::warning(this, "警告", "666", QMessageBox::Ok, QMessageBox::No);
        qDebug()<<"已经是最后一张了";
    }else
    {
        QPixmap pix(strlist[page-1]);
        ui->label->setPixmap(pix);
    }
    qDebug()<<page;
}

4.代码主要功能解释

1)在QLCDNumber中显示实时时间

在widget.h中用到以下声明:
private:
    //实时时间
    QTimer *timer_;//需要#include 
private slots:
    //实时时间
    void SltUpdateTime();
在widget.cpp中实现了以下函数操作:

1)在Widget的构造函数中
 timer_ = new QTimer(this);//实例化定时器
 timer_->start(1000);//1秒刷新一次
	
//时间刷新槽函数
 connect(timer_,&QTimer::timeout,this,&Widget::SltUpdateTime);

2)SltUpdateTime()槽方法实现
void Widget::SltUpdateTime(){
    QDateTime now = QDateTime::currentDateTime();
    QString time_str = now.toString("yyyy-MM-dd hh:mm:ss");
    ui->lcd->display(time_str);
}

2)在QLabel中实现图片翻页

在widget.h中有如下操作:
public:
    //翻页
    int n;//总共的图片数
    int page;//当前是第几张图片(从1开始)
    QStringList strlist;//图片路径放在这
private slots:
    void on_l_button_clicked();//按下左按钮
    void on_r_button_clicked();//按下有按钮
在widget.cpp中有如下操作:

1.widget的构造函数中
	n = 6;//总图片数
    page = 1;//当前是第一张
    for (int i = 0; i < n ; i++) {
        QString str;
        str = ":/img/"+QString::number(i+1)+".jpg";//拼接图片路径
        strlist.append(str);
    }
    QPixmap pix(strlist[page-1]);//":/img/1.jpg"
    ui->label->setScaledContents(true);//图片自适应QLabel的大小
    ui->label->setPixmap(pix);//放置图片    Pixmap:像素地图=>由像素组成的地图其实就是图片

2.左按钮
void Widget::on_l_button_clicked()
{
    page--;
    if(page < 1)
    {
        page++;
        QMessageBox::information(this,"提示","已经是第一张了");
        qDebug()<<"已经是第一张了";//调试用
    }else
    {
        QPixmap pix(strlist[page-1]);
        ui->label->setPixmap(pix);
    }
    qDebug()<<page;//调试用
}

3.右按钮
void Widget::on_r_button_clicked()
{
    page++;
    if(page > n)
    {
        page--;
        QMessageBox::information(this,"提示","已经是最后一张了");
        //QMessageBox::warning(this, "警告", "666", QMessageBox::Ok, QMessageBox::No);
        qDebug()<<"已经是最后一张了";//调试用
    }else
    {
        QPixmap pix(strlist[page-1]);
        ui->label->setPixmap(pix);
    }
    qDebug()<<page;//调试用
}

你可能感兴趣的:(Qt,qt,c++,开发语言)