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

需求

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

1.设置根目录;

2.可拖动;

3.可设置列数与行数;

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

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

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

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

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

8949fd2fe603

8949fd2fe603

8949fd2fe603

8949fd2fe603

8949fd2fe603

8949fd2fe603

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

8949fd2fe603

#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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/530494.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

window连接树莓派linux桌面,远程连接Raspberry Pi(树莓派)图形用户界面(X Window)

背景&#xff1a;有的时候&#xff0c;我们希望能远程连接一台linux的图形界面用来管理机器,这里需要用到tightvncserver和xtightvncviewer两个工具我的树莓派的ip是10.141.247.134 另一台机器为作client去链接树莓派的ip为10.141.247.121. 先在树莓派的机器上安装tightvncs…

linux小红帽系统能用微信,小红帽腾讯QQ微信登录版-小红帽腾讯版v1.0.3 安卓版-腾牛安卓网...

小红帽腾讯版是一款专为广大喜爱玩童话类手游的玩家打造的欧美风游戏&#xff0c;这款游戏有着最为精致的游戏画面&#xff0c;黑色风格的童话故事&#xff0c;带领玩家领略不一样的童年世界&#xff0c;给您带来最佳的游戏体验&#xff01;小红帽腾讯版简介《小红帽》是一款改…

计算机二级c语言2021年重点内容,2021年5月计算机二级C语言试题(总)

一个考生的快乐&#xff0c;不是因为他备考的时间多&#xff0c;而是因为他的选择对。选择考无忧题库&#xff0c;做二级C语言试题&#xff0c;助你备考轻松&#xff01;二级C语言试题【1】1.若有以下数组说明&#xff0c;则i10;a[a[i]]元素数值是(C)。int a[12]{1,4,7,10,2,5,…

android 图片合成pdf文件,教你怎么把多张图片合成一个pdf文件

当你遇到需要把多张图片合并成一个pdf文件时&#xff0c;你需要怎么做?可能有些朋友会说下载一个pdf格式转换工具&#xff0c;其实不必这么麻烦&#xff0c;你只要把文件上传到在线迅捷pdf转换器&#xff0c;就可以一站式帮你搞定pdf文件的格式转换以及一些常用的功能操作(如p…

华为系统鸿蒙优势,华为鸿蒙2.0可以替代安卓吗,华为鸿蒙2.0优势在哪

在华为开发者大会上&#xff0c;华为消费业务CEO 余承东&#xff0c;正式发布鸿蒙OS2.0&#xff0c;并宣布华为鸿蒙OS将全面启用全场景生态&#xff0c;并将于2020年12月发布手机版。余承东还表示&#xff0c;明年&#xff0c;华为的智能手机将全面升级&#xff0c;以支持鸿蒙操…

网页自动关机代码HTML,win10系统打开邮件显示网页html源代码如何解决

有不少win10系统用户在打开邮件的时候&#xff0c;发现内容全是显示网页的html源代码&#xff0c;无法看到内容&#xff0c;遇到这样的问题该怎么办呢&#xff0c;通常是自带的"邮件和日历"应用暂时不支持查看HTML格式的邮件&#xff0c;下面给大家分享一下具体的解决…

retrofit 2.0 android 教程,初识Retrofit2.0

Retrofit无疑是当下最流行的Android网络请求框架了&#xff0c;是Square提供的开源产品。官方网站是这样介绍Retrofit的—-A type-safe HTTP client for Android and Java&#xff0c;为Android平台的应用提供一个类型安全的HTTP客户端。Retrofit 是一套注解形式的网络请求封装…

小学生学计算机编程的必要,小学生学编程,真的那么重要吗

原标题&#xff1a;小学生学编程&#xff0c;真的那么重要吗编程简单的说就是告诉计算机要做什么。人类需要将解决问题的思路、方法和手段通过计算机能够理解的形式告诉计算机&#xff0c;使得计算机能够根据人的指令一步一步去工作&#xff0c;完成某种特定的任务。计算机是迄…

家用计算机机箱怎么选,DIY装机怎么选择电脑机箱 新手必读的电脑主机箱选购指南...

在这个讲究颜值的时代&#xff0c;对于一些主要外观的外观党来说&#xff0c;内外皆修的机箱也是算重要的。DIY装机怎么选择电脑机箱&#xff1f;下面装机之家小编就来谈下新手必读的电脑主机箱选购指南&#xff0c;对于装机选择机箱困难症的朋友不妨来看看。一、首先要明白自己…

计算机启动应用程序的方法,excel的程序_Excel2010中启动应用程序的三种方法

使用Excel时&#xff0c;需要先启动应用程序&#xff0c;怎么去进行操作启动它?今天&#xff0c;学习啦小编就教大家在Excel2010中启动应用程序的三种方法。Excel2010中启动应用程序的三种步骤如下&#xff1a;1.开始菜单在桌面上&#xff0c;单击“开始”&#xff0c;“所有程…

西安工业学院计算机系王翊,西安文理学院艺术学院

“爱的长歌”声乐教学与实践汇报音乐会——王翊师生音乐会圆满结束6月26日我院第八场“爱的长歌”声乐教学与实践汇报音乐会—王翊师生音乐会圆满结束。音乐会受到老师和同学的一致赞誉。整场音乐会高潮迭起&#xff0c;掌声不断。音乐会的学生由16级音乐表演专业的声乐方向的同…

计算机如何制作U盘启动盘,电脑如何制作U盘启动盘

为什么要制作U盘启动盘&#xff1f;U盘启动盘是什么&#xff1f;今天小编和大家普及一下&#xff0c;什么是U盘启动盘。就是一个简简单单的U盘&#xff0c;经过装机工具软件就变成了一个装有PE镜像文件的U盘&#xff0c;通过这个启动盘可以进入PE系统对电脑进行重装系统。话不多…

c 服务器二次验证码,V5验证官网 - 基础套餐免费 -滑块验证,行为验证,防刷验证 - 文档...

平台对接V5验证前后端对接流程如下图所示&#xff1a;前后端调用时序图对接V5验证分为业务网站后台api对接以及业务前端代码引入两部分。业务网站后台获取验证Token及验证服务器(getToken)用于网站后台定时通过V5控制台刷新获取验证所需要的Token及验证服务器地址。Token有效期…

战队服务器人员位置,和平精英:职业战队如何分配成员位置?5大定位划出5种职位...

#百度APP&百家号杯和平精英#随着时间的推进&#xff0c;距离百家号杯的决赛越来越近了&#xff1b;一百只精英队伍你争我抢都想要争取冠军的宝座。在最新的一场循环赛当中SC战队以70分的总积分占领榜首&#xff0c;Dae战队以69分的总积分紧随其后排名第二。虽说SC拿到了循环…

sony电视播放服务器文件,sony电视怎么样 sony电视支持视频格式【图文详解】

现在&#xff0c; 电视机 对于每个家庭来说已然不是什么奢侈品&#xff0c;并且已经成为必备的家庭电器之一。其实&#xff0c;国产电视机中也有不少的知名品牌&#xff0c;但是许多消费者对国外的电子技术持有更高的认可度&#xff0c;因此下面小编就来跟大家讲讲sony电视&…

css三栏布局技巧,CSS-三栏布局的常用6种方法

三栏布局一般指左右两栏固定宽度&#xff0c;中间一栏自适应的布局方法&#xff0c;也是许多网站常用的布局方式。如下图&#xff1a;该示例在一个html文件中编写&#xff0c;为方便起见&#xff0c;预先写好一个通用的css&#xff0c;左右宽度都为100px&#xff1b;1.浮动三栏…

jdk、jre及jvm的关系

很多程序员已经干了一段时间java了依然不明白jdk与jre的区别。 JDK就是Java Development Kit.简单的说JDK是面向开发人员使用的SDK&#xff0c;它提供了Java的开发环境和运行环境。SDK是Software Development Kit 一般指软件开发包&#xff0c;可以包括函数库、编译程序等。 …

我的理解之JAVA中的4种访问权限

一、Java中有四种访问权限&#xff0c;private、default&#xff08;一般省略&#xff09;、public、protected。 private: Java语言中对访问权限限制的最窄的修饰符&#xff0c;一般称之为“私有的”。被其修饰的属性以及方法只能被该类的对象访问&#xff0c;其子类不能访问&…

ssh连接阿里云服务器遇到的坑

1. 出现‘Host key verification failed.’ 解决方案在这里找到&#xff1a; https://askubuntu.com/questions/45679/ssh-connection-problem-with-host-key-verification-failed-error 2. 自动断开—每隔一两分钟就自动断开 参考&#xff1a; https://superuser.com/quest…

云服务器文件传输问题

最近再做一个web项目&#xff0c;目前决定先把应用放在云服务器上。我选择的云主机是aliyun的Ubuntu 16.04主机。部署好云主机环境后&#xff0c;就需要把我在本地开发好的程序上传到云主机了。刚开始打算用ftp协议来传输&#xff0c;于是参照网上的教程&#xff08;Ubuntu 16.…