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

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

需求

  做嵌入式设备,需求九宫格图片资源浏览器:

  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 <QWidget>
#include <QDir>
#include <QElapsedTimer>
#include <QTimer>
#include <QLine>
#ifdef designer
#if (QT_VERSION < QT_VERSION_CHECK(5,7,0))
#include <QtDesigner/QDesignerExportWidget>
#else
#include <QtUiPlugin/QDesignerExportWidget>
#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<QString> getListFile()    const;                      // 获取当前目录下的所有多媒体文件
    QList<QString> 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 &currentDirPath);      // 设置当前文件夹路径
    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<QFileInfo> _listFileInfo;   // 可读取的多媒体文件目录
    QList<QPixmap> _listPixmap; // 多媒体文件预览缓存
    QList<bool> _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<QRect> _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



相关文章
|
1天前
|
Linux Shell
Linux系统
是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。
|
1天前
|
Ubuntu Linux Shell
Linux系统密码忘记
【10月更文挑战第2天】在Linux系统中,若忘记密码,可以通过单用户模式或使用Live CD/USB来重置。对于Ubuntu系统,可通过GRUB引导菜单进入单用户模式,利用命令行重置密码;或使用Live CD/USB启动并挂载硬盘分区后修改密码文件。CentOS系统同样支持单用户模式重置密码,也可借助安装介质进入救援模式,挂载文件系统后进行密码重置。这些方法均能在忘记密码的情况下帮助恢复系统访问。
|
3天前
|
Linux Shell
Linux系统
是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。
|
3天前
|
Linux Shell
Linux系统
是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。
|
7天前
|
JavaScript 前端开发
js之浏览器对象|28
js之浏览器对象|28
|
2月前
|
机器学习/深度学习 人工智能 前端开发
【人工智能】利用TensorFlow.js在浏览器中实现一个基本的情感分析系统
使用TensorFlow.js在浏览器中进行情感分析是一个非常实用的应用场景。TensorFlow.js 是一个用于在JavaScript环境中训练和部署机器学习模型的库,使得开发者能够在客户端直接运行复杂的机器学习任务。对于情感分析,我们可以使用预先训练好的模型来识别文本中的积极、消极或中性情感。
64 4
【人工智能】利用TensorFlow.js在浏览器中实现一个基本的情感分析系统
|
2月前
|
机器学习/深度学习 存储 前端开发
实战揭秘:如何借助TensorFlow.js的强大力量,轻松将高效能的机器学习模型无缝集成到Web浏览器中,从而打造智能化的前端应用并优化用户体验
【8月更文挑战第31天】将机器学习模型集成到Web应用中,可让用户在浏览器内体验智能化功能。TensorFlow.js作为在客户端浏览器中运行的库,提供了强大支持。本文通过问答形式详细介绍如何使用TensorFlow.js将机器学习模型带入Web浏览器,并通过具体示例代码展示最佳实践。首先,需在HTML文件中引入TensorFlow.js库;接着,可通过加载预训练模型如MobileNet实现图像分类;然后,编写代码处理图像识别并显示结果;此外,还介绍了如何训练自定义模型及优化模型性能的方法,包括模型量化、剪枝和压缩等。
33 1
|
2月前
|
编解码 JavaScript 前端开发
JS逆向浏览器脱环境专题:事件学习和编写、DOM和BOM结构、指纹验证排查、代理自吐环境通杀环境检测、脱环境框架、脱环境插件解决
JS逆向浏览器脱环境专题:事件学习和编写、DOM和BOM结构、指纹验证排查、代理自吐环境通杀环境检测、脱环境框架、脱环境插件解决
58 1
|
2月前
|
自然语言处理 资源调度 JavaScript
JS 逆向基础篇:JS作用域和浏览器对象属性补环境
JS 逆向基础篇:JS作用域和浏览器对象属性补环境
74 1
|
2月前
|
API UED 开发者
如何在Uno Platform中轻松实现流畅动画效果——从基础到优化,全方位打造用户友好的动态交互体验!
【8月更文挑战第31天】在开发跨平台应用时,确保用户界面流畅且具吸引力至关重要。Uno Platform 作为多端统一的开发框架,不仅支持跨系统应用开发,还能通过优化实现流畅动画,增强用户体验。本文探讨了Uno Platform中实现流畅动画的多个方面,包括动画基础、性能优化、实践技巧及问题排查,帮助开发者掌握具体优化策略,提升应用质量与用户满意度。通过合理利用故事板、减少布局复杂性、使用硬件加速等技术,结合异步方法与预设缓存技巧,开发者能够创建美观且流畅的动画效果。
57 0
下一篇
无影云桌面