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,一经查实,立即删除!

相关文章

linux mdev -s没有运行,mdev详解

一、概述mdev是busybox提供的一个工具&#xff0c;用在嵌入式系统中&#xff0c;相当于简化版的udev&#xff0c;作用是在系统启动和热插拔或动态加载驱动程序时&#xff0c;自动创建设备节点。文件系统中的/dev目录下的设备节点都是由mdev创建的。在加载驱动过程中&#xff0c…

linux x86-64下,Linux x86_64下安装Flash Player 9

家里 Linux 安装已经有几天了&#xff0c;可是用 Firefox 浏览网页总是看不到 Flash。到了 Adobe 官方去下载了 Flash 插件&#xff0c;结果安装的时候说它不支持 x86_64&#xff0c;安装计划就一直搁浅。天天上网看见“缺失插件”的框框&#xff0c;非常不爽&#xff0c;所以就…

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;小红帽腾讯版简介《小红帽》是一款改…

在linux实现公平队列,多级反馈队列调度策略在Linux中的应用和实现.pdf

多级反馈队列调度策略在Linux中的应用和实现.pdf第30卷第20期 计算机工程 2004年10月I&#xff0f;01&#xff0e;30^矗2口 ComputerEngineering October2004文t标识码tA 中强分娄号I TP311&#xff0e;52软件技术与数据库 文章-号tlooo-3428(2004)20—&#xff0e;008l—_03多…

c语言第五章作业,《C语言程序设计》第五章作业.doc

《C语言程序设计》第五章作业窗体顶端《C语言程序设计》第5章作业布置日期&#xff1a;2012-3-15?????截止日期&#xff1a;2012-3-22一、单选题 (每小题6分&#xff0c;共102分)?1、以下说法中正确的是&#xff3f;&#xff3f;&#xff3f;&#xff3f;。????A、C语…

i7 5500u linux,i7 5500u相当于什么cpu

大家好&#xff0c;我是时间财富网智能客服时间君&#xff0c;上述问题将由我为大家进行解答。i7 5500u相当酷睿i5CPU&#xff0c;I7 5500U是酷睿笔记本专用CPU&#xff0c;是双核四线程的一款处理器&#xff0c;严格来说不算第五代的I7&#xff0c;而是全新一代的I7型号。酷睿…

c语言字符串用for语句去重,C# 实现字符串去重

方法一 注&#xff1a;需要.net 3.5框架的支持string s "101,102,103,104,105,101,102,103,104,105,106,107,101,108";s string.Join(",", s.Split(,).Distinct().ToArray());方法二class Program{static void Main(string[] args){string result"&…

c语言利用遍历求树高的程序,用C语言实现二叉树的遍历极其应用

用C语言实现二叉树的遍历极其应用[1]〔摘要〕&#xff1a;《数据结构》是计算机系学生的一门专业技术基础课程&#xff0c;计算机科学各领域及有关的应用软件都要用到各种数据结构。C语言有较丰富的数据类型、运算符以及函数&#xff0c;能直接与内存打交道&#xff0c;使修改、…

c语言编程出彩色告白,C语言告白代码,一闪一闪亮晶晶~

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include #include #include #define I 20#define R 340int main(){int i,j,e;int a;for(i1,aI;ifor(j(int) ( I-sqrt(I*I-(a-i)*(a-i)) );j>0;j--)printf(" ");for(e1;e<2*sqrt(I*I-(a-i)*(a-i));e)printf("…

计算机二级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,…

c语言case key pres,C#程序设计B-中国大学mooc-题库零氪

第2讲 C#语言基础2.1 数据类型、变量与常量 —— 语言中的单词随堂测验1、(加号)可以表示A、算术的加法B、正号C、字符串的连接D、事件的注册()2、int是引用类型3、string是引用类型4、double在内存中占8个字节5、int占2个字节6、Person p1 new Person(18); //Person是引用类型…

c语言递归求差分方程,如何使这个简单的递推关系(差分方程)尾递归?

bytebuster的解决方案很好&#xff0c;但他没有解释他是如何创建它的&#xff0c;所以它只会帮助解决这个特定的问题。顺便说一句&#xff0c;你的公式看起来有点像斐波纳契(但不完全)&#xff0c;它可以是calculated analytically without any looping(即使没有循环隐藏在Seq.…

android text 字体设置,Android TextView个别字体格式设置小结

android 在同一个TextView中如何展现出不同的字体和颜色总结一下1.主要是痛通过String.xml使用html标签静态配置然后动态引用Html.fromHtml(getResources().getString(R.string.myHeadStr));2.textView 动态设置//创建一个 SpannableString对象 msp new SpannableString("…

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

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

android中的xml布局文件如何引用另一个xml布局文件,引用另一个layout.xml文件而不复制它...

如果我理解正确提问者对XLARGE和SW-600dp的一个布局文件&#xff0c;另一个用于所有的休息。无论如何&#xff0c;当我偶然发现这个问题时&#xff0c;就是这样。可以通过创建文件夹layout-xlarge和layout-s600dp来解决这个问题&#xff0c;并在每个文件夹中放置一个布局文件&a…

华为系统鸿蒙优势,华为鸿蒙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;下面给大家分享一下具体的解决…

android 界面长按,Android 主界面长按创建快捷方式

Android中创建快捷方式主要有两种方式。一是在代码中直接加入生成桌面快捷方式的代码&#xff1b;二是通过小部件加入;这篇文章主要讲另外一种方法&#xff01;1、通过在AndroidManifest文件里为Activity加入加入之后。长按桌面&#xff0c;小部件中会有你应用的图标出现&#…

android+fastboot+命令,Android手机fastboot刷机命令

先进入fastboot文件所在目录连接硬件命令fastboot devices删除recover、boot,system同理Fastboot erase recovery重刷&#xff0c;boot,system同理Fastboot flash recovery cn170.img只需将boot.img和system.img刷入系统即可完成系统的刷新恶补:FASTBOOT命令有加载驱动 | fastb…