/********************************************************************** * @file FileDialogDirectory.h * @brief 文件选择对话框 * @author BaGuijun (baguijun@163.com) * @date 2024-09-04 *********************************************************************/ #ifndef _FILEDIALOG_H_ #define _FILEDIALOG_H_ #include "GUIDialogAPI.h" #include "GUIDialogBase.h" #include "qfiledialog.h" #include "qtreewidget.h" #include #define CFDPostSelectFilePath "CFDPostSelectFilePath" namespace Ui { class FileDialogDirectory; } namespace GUI { class GUIDialogAPI FileDialogDirectory : public GUIDialogBase { Q_OBJECT; public: /** * @brief 构造函数 * @param parent-父对象指针,默认为空 * @since Version: 1.0.0 **/ FileDialogDirectory(EventOper::ParaWidgetInterfaceOperator* oper, QWidget *parent = nullptr); /** * @brief 析构函数 * @since Version: 1.0.0 **/ ~FileDialogDirectory(); /** * @brief 返回当前全路径(包含文件名/文件组名) * @return 全路径字符串 * @since Version: 1.0.0 **/ QString getCurrentFullPath(); /** * @brief 判断当前选中的是不是文件组 * @param path-当前钻中的路径 * @return true-是,false-否 * @since Version: 1.0.0 **/ static bool isGourpFiles(const QString path); /** * @brief 初始化文件后缀过滤 * @param filterString-文件类型 * @note 文件类型要求格式为 类型解释 (*.文件后缀),例如 plot3D文件(*.xyz *.x)。 * @since Version: 1.0.0 **/ void iniFileFilterType(QString filterString); /** * @brief 初始化对话框打开路径 * @param dirStr-默认打开的路径 * @since Version: 1.0.0 **/ void initWin(QString dirStr); private: /** * @brief 初始化Ui内容 * @since Version: 1.0.0 **/ void initUi(); /** * @brief 获取当前电脑磁盘列表目录 * @since Version: 1.0.0 **/ void SetDirectoryForDrives(); /** * @brief 打开一个路径 * @param record 是否记录历史路径 * @since Version: 1.0.0 **/ void openFilePath(bool recordHistory); /** * @brief 在树型中归类显示 * @since Version: 1.0.0 **/ void BuildFilePathTree(); /** * @brief 刷新文件列表 * @since Version: 1.0.0 **/ void refreshRightView(); /** * @brief 根据目录名获取目录下的文件 * @param dirName-目录名 * @since Version: 1.0.0 **/ void GetFileList(QString dirName); /** * @brief 根据文件类型中的字符串获取每一个文件过滤类型 * @param filter-过滤描述字符串 * @return 文件后缀过滤集合 * @since Version: 1.0.0 **/ QStringList GetFilterFromString(const QString& filter); /** * @brief 路径添加/ * @param curPath-需要添加的路径 * @return 返回添加之后的路径 * @since Version: 1.0.0 **/ QString appendSlash(QString curPath); /** * @brief 获取文件扩展名 * @param fileName-文件名 * @return 返回扩展名 * @since Version: 1.0.0 **/ QString GetFileExt(QString fileName); /** * @brief 获取文件名的全路径 * @param index-索引 * @return 全路径 * @since Version: 1.0.0 **/ QString FindFullFilename(const QModelIndex& index); /** * @brief 按数字前的字符串形成文件分类列表,并在树型中显示 * @since Version: 1.0.0 **/ void enterDirectory(); /** * @brief 更新过滤文件列表槽函数 * @param filter-过滤描述字符串 * @since Version: 1.0.0 **/ void filterChange(QString filter); private slots: ; /** * @brief 取消槽函数 * @since Version: 1.0.0 **/ void onCancelClicked(); /** * @brief 确定槽函数 * @since Version: 1.0.0 **/ void onOkClicked(); /** * @brief 过滤条件改变槽函数 * @since Version: 1.0.0 **/ void onFilterChange(QString filter); /** * @brief 执行确定按钮槽函数 * @since Version: 1.0.0 **/ void onDoubleClickedObject(QTreeWidgetItem* pitem, int column); /** * @brief 左侧路径区域双击操作(处理路径中的盘符) * @param model index * @since Version: 1.0.0 **/ void pathTreeViewDoubleClick(const QModelIndex&); /** * @brief 路径树双击操作 * @param model index * @since Version: 1.0.0 **/ void func_PathTreeViewDoubleClick(const QModelIndex& index); void unix_PathTreeViewDoubleClick(QString itemName); /** * @brief 选择项发生变化触发这个槽,更新显示选中文件 * @since Version: 1.0.0 **/ void onItemSelectionChanged(); /** * @brief 返回上一级目录 * @since Version: 1.0.0 **/ void onUpPushButtonClicked(); /** * @brief 后退 * @since Version: 1.0.0 **/ void onBackClicked(); /** * @brief 前进 * @since Version: 1.0.0 **/ void onFrontClicked(); private: Ui::FileDialogDirectory* _ui; /** * @brief 路径变化记录实现前进后退功能 * @brief 路径变化记录前进、后退路径容器 * @since Version: 1.0.0 **/ QVector _pathBackVec{}; QVector _pathFrontVec{}; /** * @brief 当前选择路径 * @since Version: 1.0.0 **/ QString _currentFilePath; /** * @brief 目录模型 * @since Version: 1.0.0 **/ QDirModel* _dirModel; /** * @brief 当前电脑"我的文档"的路径 * @brief 当前电脑"桌面"的路径 * @brief Unix操作系统的相关路径 * @since Version: 1.0.0 **/ QString _docPath; QString _deskTopPath; QString userPath, rootPath, userName, rootName; /** * @brief 模型数据索引 * @since Version: 1.0.0 **/ QModelIndex _currentIndex; /** * @brief key为12 ...dat,value为分类下对应的文件列表 * @since Version: 1.0.0 **/ QMap> _fileGroup; /** * @brief 用于保存一个或多个文件分类,用;分割 * @since Version: 1.0.0 **/ QString _selectionText; /** * @brief 用于保存文件类型列表 * @since Version: 1.0.0 **/ QStringList _filterList; /** * @brief 文件列表 * @since Version: 1.0.0 **/ QTreeWidget* _fileTree; /** * @brief 根节点 * @since Version: 1.0.0 **/ QTreeWidgetItem* _builtinItem; /** * @brief key为12@data,value为扩展名dat,这样用是因为相同文件名,扩展名可能会不同,属于不同的分类 * @since Version: 1.0.0 **/ QHash _headFile; /** * @brief 某个文件夹下的所有文件列表 * @since Version: 1.0.0 **/ QVector _fileList; /** * @brief 保存左侧路径QTreeView双击后的文件路径 * @since Version: 1.0.0 **/ QString _treeWidgetFilename; /** * @brief 字符串常量 * @since Version: 1.0.0 **/ const static QString fatherNodeText; const static QString splitExt; }; } #endif