linux多线程九宫格,项目实战:Qt九宫格图片资源浏览器(支持window、linux、兼容各国产系统,支持子文件夹,多选,全选,图片预览,行数与列数设置等)...
需求
做嵌入式設(shè)備,需求九宮格圖片資源瀏覽器:
1.設(shè)置根目錄;
2.可拖動(dòng);
3.可設(shè)置列數(shù)與行數(shù);
4.點(diǎn)擊文件夾可以進(jìn)入文件夾;
5.點(diǎn)擊圖片可以瀏覽圖片;
6.支持觸摸屏上下拽拖瀏覽;
7.支持長安出現(xiàn)類似手機(jī)更多的操作,用于選擇多個(gè)圖片項(xiàng)做其他操作;
8.可設(shè)置文件排序規(guī)則,如大小,更新時(shí)間,創(chuàng)建時(shí)間等等;
QQ群:1047134658(點(diǎn)擊“文件”搜索“browser”,群內(nèi)與博文同步更新)
#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,? ? // 文件名升序(默認(rèn))
SORT_TYPE_FILE_NAME_DES,? ? ? ? ? ? // 文件名降序序
SORT_TYPE_MODIFY_TIME_ASC,? ? ? ? ? // 文件修改時(shí)間升序
SORT_TYPE_MODIFY_TIME_DES,? ? ? ? ? // 文件修改時(shí)間降序
SORT_TYPE_SIZE_ASC,? ? ? ? ? ? ? ? // 文件大小升序
SORT_TYPE_SIZE_DES? ? ? ? ? ? ? ? ? // 文件大小降序
};
public:
explicit MultimediaBroswerWidget(QWidget *parent = 0);
public:
QString getRootDirPath()? ? ? ? const;? ? ? ? ? ? ? ? ? ? ? // 獲取當(dāng)前設(shè)置的根目錄路徑
QString getCurrentDirPath()? ? const;? ? ? ? ? ? ? ? ? ? ? // 獲取當(dāng)前所在的目錄路徑
QStringList getNameFilters()? ? const;? ? ? ? ? ? ? ? ? ? ? // 獲取文件名過濾列表
QPixmap getBackgroundPixmap()? const;? ? ? ? ? ? ? ? ? ? ? // 獲取背景圖片
QPixmap getSelectedPixmap()? ? const;? ? ? ? ? ? ? ? ? ? ? // 獲取選擇狀態(tài)的按鈕圖片
QPixmap getUnSelectedPixmap()? const;? ? ? ? ? ? ? ? ? ? ? // 獲取非選擇狀態(tài)的按鈕圖片
QRect getSelectRect()? ? ? ? ? const;? ? ? ? ? ? ? ? ? ? ? // 獲取選擇按鈕的區(qū)域
int getSelectRightMargin()? ? ? const;? ? ? ? ? ? ? ? ? ? ? // 獲取選擇按鈕的右邊間距
int getSelectBottomMargin()? ? const;? ? ? ? ? ? ? ? ? ? ? // 獲取選擇按鈕的底部邊距
bool getLongPressed()? ? ? ? ? const;? ? ? ? ? ? ? ? ? ? ? // 獲取是否是長按選擇后的多選狀態(tài)
bool getSelectAll()? ? ? ? ? ? const;? ? ? ? ? ? ? ? ? ? ? // 獲取是否全選
SORT_TYPE getSortType()? ? ? ? const;? ? ? ? ? ? ? ? ? ? ? // 獲取分類規(guī)則
QPixmap getFolderPixmap()? ? ? const;? ? ? ? ? ? ? ? ? ? ? // 獲取文件夾圖標(biāo)
QPixmap getFolderBackgroundPixmap() const;? ? ? ? ? ? ? ? ? // 獲取文件夾時(shí)的九宮格背景
bool getCanInOutDir()? ? ? ? ? const;? ? ? ? ? ? ? ? ? ? ? // 獲取是否可以進(jìn)入子文件夾
bool getInPicture()? ? ? ? ? ? const;? ? ? ? ? ? ? ? ? ? ? // 是否當(dāng)前是放大圖片的
int getRows()? ? ? ? ? ? ? ? ? const;? ? ? ? ? ? ? ? ? ? ? // 獲取顯示行數(shù)
int getCols()? ? ? ? ? ? ? ? ? const;? ? ? ? ? ? ? ? ? ? ? // 獲取顯示列數(shù)
QList getListFile()? ? const;? ? ? ? ? ? ? ? ? ? ? // 獲取當(dāng)前目錄下的所有多媒體文件
QList getSelectFiles() const;? ? ? ? ? ? ? ? ? ? ? // 獲取當(dāng)前選擇的所有文件列表
int getTopMargin()? ? ? ? ? ? ? const;? ? ? ? ? ? ? ? ? ? ? // 獲取上邊框
int getRightMargin()? ? ? ? ? ? const;? ? ? ? ? ? ? ? ? ? ? // 獲取右邊框
int getBottomMargin()? ? ? ? ? const;? ? ? ? ? ? ? ? ? ? ? // 獲取下邊框
int getLeftMargin()? ? ? ? ? ? const;? ? ? ? ? ? ? ? ? ? ? // 獲取左邊框
int getHorizalSpace()? ? ? ? ? const;? ? ? ? ? ? ? ? ? ? ? // 獲取水平間隔
int getVerticalSpace()? ? ? ? ? const;? ? ? ? ? ? ? ? ? ? ? // 獲取垂直間隔
public:
void setRootDirPath(const QString &dirPath);? ? ? ? ? ? ? ? // 設(shè)置預(yù)覽文件夾路徑
void setCurrentDirPath(const QString ¤tDirPath);? ? ? // 設(shè)置當(dāng)前文件夾路徑
void setNameFilters(const QStringList &nameFilters);? ? ? ? // 設(shè)置文件名過濾
void setBackgroundPixmap(const QPixmap &backgroundPixmap);? // 設(shè)置背景圖片
void setSelectedPixmap(const QPixmap &selectedPixmap);? ? ? // 設(shè)置選擇狀態(tài)圖片
void setUnSelectedPixmap(const QPixmap &unSelectedPixmap);? // 設(shè)置未選擇狀態(tài)的圖片
void setSelectRect(const QRect &selectRect);? ? ? ? ? ? ? ? // 設(shè)置未選擇狀態(tài)圖片
void setSelectRightMargin(int selectRightMargin);? ? ? ? ? // 設(shè)置選擇按鈕的右邊間距
void setSelectBottomMargin(int selectBottomMargin);? ? ? ? // 設(shè)置選擇按鈕的底部間距
void setLongPressed(bool longPressed);? ? ? ? ? ? ? ? ? ? ? // 設(shè)置長按選擇后的多選狀態(tài)
void selectAll(bool selected = true);? ? ? ? ? ? ? ? ? ? ? // 設(shè)置進(jìn)入選擇狀態(tài),并設(shè)置是否全選
void setSortType(const SORT_TYPE &sortType);? ? ? ? ? ? ? ? // 設(shè)置分類規(guī)則
void setFolderPixmap(const QPixmap &folderPixmap);? ? ? ? ? // 設(shè)置文件夾圖標(biāo)
void setFolderBackgroundPixmap(const QPixmap &folderBackgroundPixmap);
// 獲取文件夾時(shí)的九宮格背景
void setCanInOutDir(bool canInOutDir);? ? ? ? ? ? ? ? ? ? ? // 設(shè)置是否可以進(jìn)入下一級(jí)返回上一級(jí)文件夾(
// false的時(shí)候不顯示子文件夾)
void setRows(int rows);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 設(shè)置顯示行數(shù)
void setCols(int value);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 設(shè)置顯示列數(shù)
void setTopMargin(int topMargin);? ? ? ? ? ? ? ? ? ? ? ? ? // 設(shè)置上邊框
void setRightMargin(int rightMargin);? ? ? ? ? ? ? ? ? ? ? // 設(shè)置右邊框
void setBottomMargin(int bottomMargin);? ? ? ? ? ? ? ? ? ? // 設(shè)置下邊框
void setLeftMargin(int leftMargin);? ? ? ? ? ? ? ? ? ? ? ? // 設(shè)置左邊框
void setMargin(int topMargin, int rightMargin, int bottomMargin, int leftMargin);? // 設(shè)置邊框
void setHorizalSpace(int horizalSpace);? ? ? ? ? ? ? ? ? ? // 設(shè)置水平間隔
void setVerticalSpace(int verticalSpace);? ? ? ? ? ? ? ? ? // 設(shè)置垂直間隔
void setInPicture(bool inPicture);? ? ? ? ? ? ? ? ? ? ? ? ? // 是否當(dāng)前是放大圖片的
public:
void reload();? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 重新加載緩存
void keyLeft();
void keyRight();
void keyOk();
protected:
void updateRects();? ? // 更新位置
void updateSlider();? ? // 更新滑動(dòng)欄
protected slots:
void slot_timerOut();? // 長按超時(shí)
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;? ? // 選中時(shí)的圖片
QPixmap _folderPixmap;? ? ? // 文件夾圖片
QPixmap _folderBackgroundPixmap;? ? // 文件夾九宮格項(xiàng)的背景
QFont _fontFolder;? ? ? ? ? // 文件夾字體
QStringList _nameFilters;? // 文件名過濾
QString _dirPath;? ? ? ? ? // 目錄路徑
QString _rootDirPath;? ? ? // 目錄根路徑
SORT_TYPE _sortType;? ? ? ? // 排序種類
QList _listFileInfo;? // 可讀取的多媒體文件目錄
QList _listPixmap; // 多媒體文件預(yù)覽緩存
QList _listSelected;? // 是否選中文件
QRect _selectRect;? ? ? ? ? // 選擇框大小
int _selectRightMargin;? ? // 選擇框與圖片右邊的間距
int _selectBottomMargin;? ? // 選擇框與圖片底邊的間距
int _rows;? ? ? ? ? ? ? ? ? // 顯示行數(shù)
int _cols;? ? ? ? ? ? ? ? ? // 顯示列數(shù)
int _topMargin;? ? ? ? ? ? // 上邊界
int _rightMargin;? ? ? ? ? // 右邊界
int _bottomMargin;? ? ? ? ? // 下邊界
int _leftMargin;? ? ? ? ? ? // 左邊界
int _horizalSpace;? ? ? ? ? // 水平間隔
int _verticalSpace;? ? ? ? // 垂直間隔
int _sliderWidth;? ? ? ? ? // 滑塊寬度
QRect _sliderHandleRect;? ? // 滑塊矩形
QRect _sliderRect;? ? ? ? ? // 滑動(dòng)條矩形
int _logicalTop;? ? ? ? ? ? // 邏輯頂部
int _logicalBottom;? ? ? ? // 邏輯底部
int _logicalHeight;? ? ? ? // 邏輯底部
int _sliderFreeSpace;? ? ? // 滑塊余量
bool _sliderPressed;? ? ? ? // 滑塊按下
private:
float _pixmapWidth;? ? ? ? // 輔助變量,圖像寬度
float _pixmapHeight;? ? ? ? // 輔助變量,圖像高度
QList _listRect;? ? // 多媒體
int _originY;? ? ? ? ? ? ? // 豎向位置
bool _pressed;? ? ? ? ? ? ? // 標(biāo)記是否按下鼠標(biāo)
bool _isMoved;? ? ? ? ? ? ? // 標(biāo)記是否按下鼠標(biāo)后移動(dòng)
QPoint _lastPoint;? ? ? ? ? // 記錄最近一次拖動(dòng)的鼠標(biāo)位置
bool _longPressed;? ? ? ? ? // 標(biāo)記是否在長按狀態(tài)
bool _longPressedFirst;? ? // 標(biāo)記是否剛進(jìn)入長安狀態(tài)
QTimer _timer;? ? ? ? ? ? ? // 用于計(jì)時(shí)長按操作
bool _canInOutDir;? ? ? ? ? // 是否允許進(jìn)入下一級(jí)返回上以及
bool _inPicture;? ? ? ? ? ? // 是否當(dāng)前是放大圖片的
int _inPictureIndex;
QPixmap _inPicturePixmap;
};
#endif // MULTIMEDIABROSWERWIDGET_H
若該文為原創(chuàng)文章,轉(zhuǎn)載請(qǐng)注明原文出處
總結(jié)
以上是生活随笔為你收集整理的linux多线程九宫格,项目实战:Qt九宫格图片资源浏览器(支持window、linux、兼容各国产系统,支持子文件夹,多选,全选,图片预览,行数与列数设置等)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 七年级上册计算机工作计划,清华大学版信息
- 下一篇: 三花智控是做什么的