使用Qt制作简易的图片查看器

我们知道windows系统有自带的图片查看器,那么我们也可以用Qt制作一款类似的图片查看器,实现图片的打开查看以及图片的翻页,下面我就来分享一下图片查看器的制作方法。

目录

一、描述

二、代码实现

1.头文件

2.源文件

3.结果展示


一、描述

实现图片浏览器用到的知识,包括窗口部件、布局、事件、对象模型与容器类、图形视图、模型/视图编程以及多线程等。大致流程为:首先定义一个图片类,该类包含图片的路径、文件名、文件id以及获取这些变量的函数。然后定义了一个图片数组类,主要包含添加图像以及获取所有图像以及新加入图像的函数。最后通过将图片名字加入到界面左侧QDockWidget部件中的QTreeView中,通过线程将图片的预览加入界面下侧的窗口部件中。最后通过双击可查看完整图片,以及通过滚轮和鼠标等事件来对图片进行一些操作。
 

  • 显示图片区域是一个 label
  • 左右箭头是一个 pushButton 查看上一张 下一张图片的
  • 中间的单行文本框(lineEdit)显示图片路径
  • 选择图片:单击打开文件对话框选择多张图片

控件没有什么难度,主要就是打开文件夹,自动计算文件夹下的所有文件存储到队列中,队列中可以是图片的完整路径,也可以是图片,可以切换,如果选择内存加载模式则会自动将路径转为图片,这样的话有个好处,就是在翻页查看图片的时候速度会非常的快,因为直接显示的是内存中的图片,而不需要重新加载路径,毕竟路径加载图片又需要重新读取硬盘。

系统提示篇幅过短,所以下面是歌词分享:

《只因你太美》歌词 
所属专辑:只因你太美
演唱者:SWIN-S
作词:WILLIUS / RK / 蔡徐坤
作曲:WILLIUS
编曲:WILLIUS
只因你太美 baby 只因你太美 baby
只因你实在是太美 baby 只因你太美 baby
迎面走来的你让我如此蠢蠢欲动
这种感觉我从未有
Cause I got a crush on you who you
你是我的我是你的谁
再多一眼看一眼就会爆炸
再近一点靠近点快被融化
想要把你占为己有baby bae
不管走到哪里都会想起的人是你 you you
我应该拿你怎样
uh 所有人都在看着你
我的心总是不安
oh 我现在已病入膏肓
eh eh 难道真的因为你而疯狂吗
我本来不是这种人
因你变成奇怪的人
第一次呀变成这样的我
不管我怎么去否认
只因你太美 baby 只因你太美 baby
只因你实在是太美 baby 只因你太美 baby
oh eh oh 现在确认地告诉我
oh eh oh 你到底属于谁
oh eh oh 现在确认地告诉我
oh eh oh 你到底属于谁 就是现在告诉我
跟着这节奏 缓缓 make wave
甜蜜的奶油 it's your birthday cake
男人们的 game call me 你恋人
别被欺骗愉快的 I wanna play
我的脑海每分每秒只为你一人沉醉
最迷人让我神魂颠倒是你身上香水
oh right baby I'm fall in love with you
我的一切你都拿走只要有你就已足够
我到底应该怎样
uh 我心里一直很不安
其他男人们的视线
Oh 全都只看向你的脸
Eh eh 难道真的因为你而疯狂吗
我本来不是这种人
因你变成奇怪的人
第一次呀变成这样的我
不管我怎么去否认
只因你太美 baby 只因你太美 baby
只因你实在是太美 baby 只因你太美 baby
我愿意把我的全部都给你
我每天在梦里都梦见你还有我闭着眼睛也能看到你
现在开始我只准你看我
I don’t wanna wake up in dream 我只想看你这是真心话
只因你太美 baby 只因你太美 baby
只因你实在是太美 baby 只因你太美 baby
oh eh oh 现在确认的告诉我
oh eh oh 你到底属于谁
oh eh oh 现在确认的告诉我
oh eh oh 你到底属于谁就是现在告诉我

二、代码实现

1.头文件

#ifndef WIDGET_H
#define WIDGET_H

#include 
#include 
#include 
#include   //按钮
#include   //文件对话框
#include 
#include 
#include 

class Widget : public QWidget
{
    Q_OBJECT

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

private slots:
    void show_pic();
    void up_pic();
    void down_pic();

private:
    QLabel *l;
    QPushButton *pb1, *pb2, *pb3;
    QStringList filename;
    int pos;
};

#endif // WIDGET_H

2.源文件

#include "widget.h"
#include 

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    l = new QLabel("showpic", this);
    l->setFixedSize(800, 600);
    l->setAlignment(Qt::AlignCenter);
    l->setPixmap(QPixmap(":/pic/cxk.jpg"));
    l->setScaledContents(true); //设置自适应

    pb1 = new QPushButton;
    pb1->setFixedSize(100, 100);
    pb1->setIcon(QIcon(":/pic/open.png")); //设置图标
    pb1->setIconSize(pb1->size());  //设置图标大小
    pb1->setFlat(true);  //设置透明

    pb2 = new QPushButton;
    pb2->setFixedSize(100, 100);
    pb2->setIcon(QIcon(":/pic/up.png")); //设置图标
    pb2->setIconSize(pb2->size());  //设置图标大小
    pb2->setFlat(true);  //设置透明

    pb3 = new QPushButton;
    pb3->setFixedSize(100, 100);
    pb3->setIcon(QIcon(":/pic/down.png")); //设置图标
    pb3->setIconSize(pb3->size());  //设置图标大小
    pb3->setFlat(true);  //设置透明

    pb2->setEnabled(false);
    pb3->setEnabled(false);

    QHBoxLayout *hbox = new QHBoxLayout;
    hbox->addStretch();
    hbox->addWidget(pb2);
    hbox->addWidget(pb1);
    hbox->addWidget(pb3);
    hbox->addStretch();

    QVBoxLayout *vbox = new QVBoxLayout;
    vbox->addWidget(l);
    vbox->addLayout(hbox);
    setLayout(vbox);

    connect(pb1, SIGNAL(clicked(bool)), this, SLOT(show_pic()));
    connect(pb2, SIGNAL(clicked(bool)), this, SLOT(up_pic()));
    connect(pb3, SIGNAL(clicked(bool)), this, SLOT(down_pic()));
}

Widget::~Widget()
{

}

void Widget::show_pic()
{
    QStringList names;
    names = (QFileDialog::getOpenFileNames(this, "所有图片", ".", "Image Files (*.png *.jpg *.bmp)"));
    if(names.isEmpty())
        return;
    filename = names;
    pos = 0;
    l->setPixmap(QPixmap(filename.at(pos)));
    pb2->setEnabled(true);
    pb3->setEnabled(true);
}


void Widget::up_pic()
{
    if(pos == 0)
       pos = filename.length()-1;
    else
       pos--;
    l->setPixmap(QPixmap(filename.at(pos)));
}

void Widget::down_pic()
{
    if(pos == filename.length()-1)
       pos = 0;
    else
       pos++;
    l->setPixmap(QPixmap(filename.at(pos)));

}


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

    return a.exec();
}

3.结果展示

 

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