当前位置: 首页 > >

项目实战:Qt九宫格图片资源浏览器(支持window、linux、兼容各国产系统,支持子文件夹,多选,全选,图片预览,行数与列数设置等)

发布时间:

若该文为原创文章,转载请注明原文出处
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/115035611
长期持续带来更多项目与技术分享,咨询请加QQ:21497936、微信:yangsir198808
红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…(点击传送门)


开发专栏:商业项目实战


需求

??做嵌入式设备,需求九宫格图片资源浏览器:
??1.设置根目录;
??2.可拖动;
??3.可设置列数与行数;
??4.点击文件夹可以进入文件夹;
??5.点击图片可以浏览图片;
??6.支持触摸屏上下拽拖浏览;
??7.支持长安出现类似手机更多的操作,用于选择多个图片项做其他操作;
??8.可设置文件排序规则,如大小,更新时间,创建时间等等;




Demo

??
??
??
??
??
??


下载体验地址

??CSDN粉丝免积分下载:https://download.csdn.net/download/qq21497936/15993722
??QQ群:1047134658(点击“文件”搜索“browser”,群内与博文同步更新)




V1.5.1

??


#ifndef MULTIMEDIABROSWERWIDGET_H
#define MULTIMEDIABROSWERWIDGET_H

#include
#include
#include
#include
#include

#ifdef designer

#if (QT_VERSION < QT_VERSION_CHECK(5,7,0))

#include
#else
#include
#endif
class QDESIGNER_WIDGET_EXPORT MultimediaBroswerWidget : public QWidget
#else
class MultimediaBroswerWidget : public QWidget
#endif
{
Q_OBJECT
public:
enum SORT_TYPE {
SORT_TYPE_FILE_NAME_ASC = 0x00, // 文件名升序(默认)
SORT_TYPE_FILE_NAME_DES, // 文件名降序序
SORT_TYPE_MODIFY_TIME_ASC, // 文件修改时间升序
SORT_TYPE_MODIFY_TIME_DES, // 文件修改时间降序
SORT_TYPE_SIZE_ASC, // 文件大小升序
SORT_TYPE_SIZE_DES // 文件大小降序
};

public:
explicit MultimediaBroswerWidget(QWidget *parent = 0);

public:
QString getRootDirPath() const; // 获取当前设置的根目录路径
QString getCurrentDirPath() const; // 获取当前所在的目录路径
QStringList getNameFilters() const; // 获取文件名过滤列表
QPixmap getBackgroundPixmap() const; // 获取背景图片
QPixmap getSelectedPixmap() const; // 获取选择状态的按钮图片
QPixmap getUnSelectedPixmap() const; // 获取非选择状态的按钮图片
QRect getSelectRect() const; // 获取选择按钮的区域
int getSelectRightMargin() const; // 获取选择按钮的右边间距
int getSelectBottomMargin() const; // 获取选择按钮的底部边距
bool getLongPressed() const; // 获取是否是长按选择后的多选状态
bool getSelectAll() const; // 获取是否全选
SORT_TYPE getSortType() const; // 获取分类规则
QPixmap getFolderPixmap() const; // 获取文件夹图标
QPixmap getFolderBackgroundPixmap() const; // 获取文件夹时的九宫格背景
bool getCanInOutDir() const; // 获取是否可以进入子文件夹
bool getInPicture() const; // 是否当前是放大图片的

int getRows() const; // 获取显示行数
int getCols() const; // 获取显示列数
QList getListFile() const; // 获取当前目录下的所有多媒体文件
QList getSelectFiles() const; // 获取当前选择的所有文件列表

int getTopMargin() const; // 获取上边框
int getRightMargin() const; // 获取右边框
int getBottomMargin() const; // 获取下边框
int getLeftMargin() const; // 获取左边框
int getHorizalSpace() const; // 获取水*间隔
int getVerticalSpace() const; // 获取垂直间隔

public:
void setRootDirPath(const QString &dirPath); // 设置预览文件夹路径
void setCurrentDirPath(const QString ¤tDirPath); // 设置当前文件夹路径
void setNameFilters(const QStringList &nameFilters); // 设置文件名过滤
void setBackgroundPixmap(const QPixmap &backgroundPixmap); // 设置背景图片
void setSelectedPixmap(const QPixmap &selectedPixmap); // 设置选择状态图片
void setUnSelectedPixmap(const QPixmap &unSelectedPixmap); // 设置未选择状态的图片
void setSelectRect(const QRect &selectRect); // 设置未选择状态图片
void setSelectRightMargin(int selectRightMargin); // 设置选择按钮的右边间距
void setSelectBottomMargin(int selectBottomMargin); // 设置选择按钮的底部间距
void setLongPressed(bool longPressed); // 设置长按选择后的多选状态
void selectAll(bool selected = true); // 设置进入选择状态,并设置是否全选
void setSortType(const SORT_TYPE &sortType); // 设置分类规则
void setFolderPixmap(const QPixmap &folderPixmap); // 设置文件夹图标
void setFolderBackgroundPixmap(const QPixmap &folderBackgroundPixmap);
// 获取文件夹时的九宫格背景
void setCanInOutDir(bool canInOutDir); // 设置是否可以进入下一级返回上一级文件夹(
// false的时候不显示子文件夹)

void setRows(int rows); // 设置显示行数
void setCols(int value); // 设置显示列数
void setTopMargin(int topMargin); // 设置上边框
void setRightMargin(int rightMargin); // 设置右边框
void setBottomMargin(int bottomMargin); // 设置下边框
void setLeftMargin(int leftMargin); // 设置左边框
void setMargin(int topMargin, int rightMargin, int bottomMargin, int leftMargin); // 设置边框
void setHorizalSpace(int horizalSpace); // 设置水*间隔
void setVerticalSpace(int verticalSpace); // 设置垂直间隔
void setInPicture(bool inPicture); // 是否当前是放大图片的

public:
void reload(); // 重新加载缓存

void keyLeft();
void keyRight();
void keyOk();

protected:
void updateRects(); // 更新位置
void updateSlider(); // 更新滑动栏

protected slots:
void slot_timerOut(); // 长按超时

protected:
void paintEvent(QPaintEvent *event);
void resizeEvent(QResizeEvent *event);
void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
void mouseDoubleClickEvent(QMouseEvent *event);

protected:
void drawBackground(QPainter *painter);
void drawPixmaps(QPainter *painter);
void drawSlider(QPainter *painter);
void drawCurrentPixmap(QPainter *painter);

private:
QDir _dir; // 目录

QPixmap _backgroundPixmap; // 背景图片
QPixmap _unSelectedPixmap; // 未选中的图片
QPixmap _selectedPixmap; // 选中时的图片
QPixmap _folderPixmap; // 文件夹图片
QPixmap _folderBackgroundPixmap; // 文件夹九宫格项的背景
QFont _fontFolder; // 文件夹字体

QStringList _nameFilters; // 文件名过滤
QString _dirPath; // 目录路径
QString _rootDirPath; // 目录根路径

SORT_TYPE _sortType; // 排序种类

QList _listFileInfo; // 可读取的多媒体文件目录
QList _listPixmap; // 多媒体文件预览缓存
QList _listSelected; // 是否选中文件

QRect _selectRect; // 选择框大小
int _selectRightMargin; // 选择框与图片右边的间距
int _selectBottomMargin; // 选择框与图片底边的间距

int _rows; // 显示行数
int _cols; // 显示列数

int _topMargin; // 上边界
int _rightMargin; // 右边界
int _bottomMargin; // 下边界
int _leftMargin; // 左边界
int _horizalSpace; // 水*间隔
int _verticalSpace; // 垂直间隔

int _sliderWidth; // 滑块宽度
QRect _sliderHandleRect; // 滑块矩形
QRect _sliderRect; // 滑动条矩形
int _logicalTop; // 逻辑顶部
int _logicalBottom; // 逻辑底部
int _logicalHeight; // 逻辑底部
int _sliderFreeSpace; // 滑块余量
bool _sliderPressed; // 滑块按下

private:
float _pixmapWidth; // 辅助变量,图像宽度
float _pixmapHeight; // 辅助变量,图像高度

QList _listRect; // 多媒体

int _originY; // 竖向位置

bool _pressed; // 标记是否按下鼠标
bool _isMoved; // 标记是否按下鼠标后移动
QPoint _lastPoint; // 记录最*一次拖动的鼠标位置

bool _longPressed; // 标记是否在长按状态
bool _longPressedFirst; // 标记是否刚进入长安状态
QTimer _timer; // 用于计时长按操作

bool _canInOutDir; // 是否允许进入下一级返回上以及

bool _inPicture; // 是否当前是放大图片的
int _inPictureIndex;
QPixmap _inPicturePixmap;
};

#endif // MULTIMEDIABROSWERWIDGET_H



若该文为原创文章,转载请注明原文出处
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/115035611



友情链接: