需求

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

1.设置根目录;

2.可拖动;

3.可设置列数与行数;

4.点击文件夹可以进入文件夹;

5.点击图片可以浏览图片;

6.支持触摸屏上下拽拖浏览;

7.支持长安出现类似手机更多的操作,用于选择多个图片项做其他操作;

8.可设置文件排序规则,如大小,更新时间,创建时间等等;

QQ群:1047134658(点击“文件”搜索“browser”,群内与博文同步更新)

#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 &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 _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

若该文为原创文章,转载请注明原文出处

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

  1. 视频教程-PowerPoint项目实战从入门到精通视频课程(兼容2007、2010、2013、2016版本)-Office/WPS

    PowerPoint项目实战从入门到精通视频课程(兼容2007.2010.2013.2016版本) 有十年的开发经验和十年的培训经验,熟悉以下技术: 开源技术:struts2.hibernate.my ...

  2. android 九宫格图片选择(微信朋友圈) 图片预览 (底部recycleview 不卡顿)

    最近做一个功能 就是仿照微信选择图片,图片预览,图片删除的功能 主要涉及以下知识点: 1 在图片预览的页面可以来回滑动,当前图片是选中的就背景变蓝.点击底部切换上半部分的选择.上半部分选择切换底部的选 ...

  3. Android---仿QQ空间动态九宫格图片预览(一)

    Android-仿QQ空间动态九宫格图片预览(一) 文章目录 Android---仿QQ空间动态九宫格图片预览(一) NineGridImageView(九宫格图片控件) 预览效果 特性 用法 dem ...

  4. Android 手势检测实战 打造支持缩放平移的图片预览效果(下)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/39480503,本文出自:[张鸿洋的博客] 上一篇已经带大家实现了自由的放大缩小图 ...

  5. 【实战】前端必会技巧 —— window.open 实现图片预览而非下载

    文章目录 一.问题 二.解决 三.其他尝试 四.拓展学习 1.window.open 语法 实例 2.document.write 语法 实例 一.问题 多个 图片 url (用逗号分隔开) 图片 u ...

  6. linux 预览md文件_利用Tornado搭建文档预览系统

    在平时的工作或学习中,我们经常会接触不同格式的文档类型,比如txt,log,Offices文档,编程代码脚本,图片,视频等.本文将会介绍笔者的一个朴素想法,即把不同格式的文档都放在同一个平台中进行预览 ...

  7. python使用matplotlib可视化、使用subplots函数将可视化的画布划分为网格状的若干子区、通过nrows和ncols参数设置设置行数和列数

    python使用matplotlib可视化.使用subplots函数将可视化的画布划分为网格状的若干子区.通过nrows和ncols参数设置设置行数和列数 目录

  8. PyQt5 技术篇-设置QTableWidget表格组件默认值实例演示,如何获取QTableWidget表格组件里的值,获取表格的行数和列数

    self.tableWidget.setItem(0, 0, QTableWidgetItem("设置值的内容")) 可以设置指定单元格里的值. self.tableWidget. ...

  9. JS魔法堂之实战:纯前端的图片预览

    一.前言 图片上传是一个普通不过的功能,而图片预览就是就是上传功能中必不可少的子功能了.在这之前,我曾经通过订阅input[type=file]元素的 onchange事件,一旦更改路径则将图片上传至 ...

最新文章

  1. Anaconda+conda创建python沙箱环境
  2. phpstorm破解安装
  3. Ubuntu下如何正确安装FFmpeg
  4. windows WEB 服务器安全策略
  5. 安卓案例:联选系部与专业
  6. 使用git在本地电脑与远程GitHub/gitlub库中clone别人的github上的远程仓库代码,找资源
  7. java做一个客房管理系统定制_开题报告基于Java的酒店客房管理系统的设计与实现.doc...
  8. 学习电商项目的经验总结(三)
  9. 再追哥德尔开篇---哥德尔逻辑与哲学之一
  10. QQ出现大规模盗号,qq被盗发布不良信息怎么办
  11. 周杰伦要出新专辑了?上 Instagram 看看
  12. 使用Seaborn和Pandas进行相关性分析和可视化
  13. 量化专业术语——转自BigQuant
  14. linux下录音识别成文字软件,如何将录音转换成文字?录音转文字简单方法介绍...
  15. 获取公众号的关注链接
  16. moment常用函数
  17. [激光原理与应用-60]:激光器 - 光学 - 光的四大理论框架与其层次:几何光学、波动光学、电磁光学、电子光学
  18. 数字电路-04 触发器Flip-flop!
  19. 第一章 初步认识数据透视表
  20. Mac终端加入IDEA命令

热门文章

  1. @所有人,云计算喊你一起来学习!
  2. 我们研究了1.5万场活动,换个大城市生活可能对你有用
  3. 「拨云见日」英特尔揭秘短视频背后的二三事
  4. flink sql设置并行度_Flink集成Hivestream模式用例
  5. php验证mysql内数据_MySQL中数据类型的验证_MySQL
  6. vsftpd常用操作
  7. 爬虫学习日记 Day1 开始爬虫
  8. php mysql5.7.110安装教程_MYSQL教程mysql5.7.19 winx64安装配置方法图文教程(win10)
  9. Python 线程优先队列 PriorityQueue - Python零基础入门教程
  10. 快钱接口php,快钱支付接口