日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

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

發布時間:2025/3/8 linux 31 豆豆

需求

做嵌入式設備,需求九宮格圖片資源瀏覽器:

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、兼容各国产系统,支持子文件夹,多选,全选,图片预览,行数与列数设置等)...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。