功能:
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