自己用qt编写的图片查看器

436 阅读2分钟

功能:
1.能打开并显示所有QImage能识别的图片格式文件
2.能缩放,拖动图片,Ctrl+右击还原到适应窗口大小
3.右击可弹出菜单栏,菜单包括:适应宽度,适应窗口,原图大小,截图保存,批量重命名
4.适应宽度的状态下,只能上下拖动图片
5.左右方向键或者A和D键控制前后图片切换
6.记录上一次关闭窗口时,窗口的位置和大小,并在下一次打开的时候按照该位置和大小显示窗口
7.能接收拖动图片或者文件夹到本软件界面,并显示文件夹中的所有图片文件
8.增加批量重命名的功能
9.标题栏显示当前图片的路径
10.界面增加半透明的切换图片按钮
下面看一下实际界面:

和win10自带的图片查看器进行比较,界面更简洁
在这里插入图片描述

缩放和拖动图片更加自由
在这里插入图片描述

接收拖进文件夹操作,遍历显示所有文件夹内图片
在这里插入图片描述

批量重命名和另存功能
在这里插入图片描述

我的代码实现上述功能主要是重写了qgraphicview , qgraphicsceen,qgraphicitem,qlabel,添加了各种鼠标和键盘事件。\

主界面头文件代码如下:

#ifndef MAXPICSHOWFORM_H
#define MAXPICSHOWFORM_H
#include <QWidget>
#include <QKeyEvent>
#include <QFileDialog>
#include <QList>
#include <QMessageBox>
#include <QImage>
#include <QGraphicsScene>
#include <QApplication>
#include <QDesktopWidget>
#include <QSettings>
#include <QMap>
#include <QVBoxLayout>
#include <QGraphicsView>
#include <windowsx.h>//为了使用GET_X_LPARAM
#include <QMainWindow>
#include <QMenu>
#include <QDragMoveEvent>
#include <QDragEnterEvent>
#include <QDir>
#include <QFile>
#include <QDropEvent>
#include <QMimeData>
#include "imagewidget.h"
#include "mygraphicsscene.h"
#include "mygraphicview.h"
#include "mylabel.h"
#include "mygraphicrectitem.h"
#include "QUrl"
namespace Ui {
class MaxPicShowForm;
}
class MaxPicShowForm : public QWidget
{
    Q_OBJECT
public:
    explicit MaxPicShowForm(QWidget *parent = nullptr);
    ~MaxPicShowForm();
    void OpenPic(QString strStartPath);
    void getLeftArrowEvent();
    void getrightArrowEvent();
    void getOpenFileEvent();
    void getShowpopMenuEvent();
    void renameAllPictures();
    void recvShowPicSignal(QImage image);
    void ShowPic(int nCrtIndex);
    void showMousePos(QPointF pointf, QColor qColor, qreal qrScale);
    void recvGreViewMouseWheel(qreal qrScale);
    void recvRightMouseClicked();
    void recvResetPicture();//图片控件中右击鼠标,重置了图像位置和大小
    void getMouseMoveEvent(QGraphicsSceneMouseEvent *event);
    void getKeyPressEvent(QKeyEvent *ev);
    void keyReleaseEvent(QKeyEvent *event);
    void getMoveEvent(QPoint movPoint);
    void getLeftScaleEvent(QPoint movPoint);
    void getRightScaleEvent(QPoint movPoint);
    void getBottomScaleEvent(QPoint movPoint);
    void getTopScaleEvent(QPoint movPoint);
    void getRBScaleEvent(QPoint movPoint);
    void getCloseEvent();
    void getMaxEvent();
    void getMinEvent();
    void getDragDropFileLst(QStringList strFileLst);
    virtual void keyPressEvent(QKeyEvent *ev);
    virtual void resizeEvent(QResizeEvent *event);
    virtual void closeEvent(QCloseEvent *event);
    virtual void hideEvent(QHideEvent *event);
    virtual void mousePressEvent(QMouseEvent *event);
    virtual void mouseMoveEvent(QMouseEvent *event);
    virtual void changeEvent(QEvent *e);//为了在窗口最小化之后,用户点击任务栏,可以正常还原
    virtual void enterEvent(QEvent *event);
    virtual void leaveEvent(QEvent *event);
    bool            m_bMax;
    QStringList     m_strPathList;
    qint32          m_nCrtIndex;
    bool            m_bCtrlKeyPressed;
    bool            m_bClipPic;
    bool            m_bOriginalSize;//锁定图片大小为原图大小
    bool            m_bFixWidthSize;//锁定适应窗口宽度
    bool            m_bFixHeightSize;//锁定适应窗口宽度
    myGraphicView   *mygraphicview;
protected:
    virtual void dragEnterEvent(QDragEnterEvent *event) override;
    virtual void dragMoveEvent(QDragMoveEvent *e) override;
    virtual void dropEvent(QDropEvent *event) override;//接收拖拽事件
//判断是否为有效的文件
virtual bool IsValidDragFile(QDropEvent *e);
//接受目录
virtual void AcceptFolder(QString folder);
//接受文件
virtual void AcceptFile(QString pathfile);
private:
    Ui::MaxPicShowForm *ui;
    //QGraphicsScene  *m_qgraphicsScene;
    myGraphicsScene   *m_qgraphicsScene;
    ImageWidget      *m_Image;
    myLabel          *labelTital;
    myLabel          *labelmax;
    myLabel          *labelmin;
    myLabel          *labelclose;
    myLabel          *labelpopMenu;
    myLabel          *labelOpenInTital;
    myLabel          *labelLft;
    myLabel          *labelRit;
    myLabel          *labelBot;
    myLabel          *labelTop;
    myLabel          *labelRB;
    myLabel          *labelOpenFile;
    myLabel          *labelScreenBack;
    myLabel          *labelLeftArrow;
    myLabel          *labelRightArrow;
    QMenu *pMenu;
    myGraphicRectItem *m_myGraphicRectItem;//截图使用
private slots:
    void onMenuEvent();//弹出菜单点击后响应函数
};
#endif // MAXPICSHOWFORM_H

下载链接:
download.csdn.net/download/we…