linux多线程九宫格,项目实战:Qt九宫格图片资源浏览器(支持window、linux、兼容各国产系统,支持子文件夹,多选,全选,图片预览,行数与列数设置等)...
需求
做嵌入式設備,需求九宮格圖片資源瀏覽器:
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 ¤tDirPath);? ? ? // 設置當前文件夾路徑
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、兼容各国产系统,支持子文件夹,多选,全选,图片预览,行数与列数设置等)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 七年级上册计算机工作计划,清华大学版信息
- 下一篇: 三花智控是做什么的