GrabBag/AppUtils/AppCommon/Inc/PathManager.h

107 lines
3.1 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef PATHMANAGER_H
#define PATHMANAGER_H
#include <QString>
#include <mutex>
/**
* @brief 路径管理器类(单例模式),统一管理应用程序的配置文件路径
*
* 该类负责根据不同操作系统提供合适的配置文件存储路径:
* - Windows: 程序目录
* - Linux: 用户配置目录 (~/.config/AppName/)
*
* 特点:
* - 懒加载模式首次调用GetInstance()时自动初始化
* - 自动检测应用名称:从应用程序路径中提取
* - 线程安全:使用互斥锁保证多线程环境下的安全访问
*
* 用法:
* @code
* // 直接获取实例,无需手动初始化
* PathManager& pm = PathManager::GetInstance();
* QString configPath = pm.GetConfigFilePath();
* QString calibPath = pm.GetCalibrationFilePath();
* @endcode
*/
class PathManager
{
public:
/**
* @brief 获取单例实例
* 首次调用时自动初始化,从应用程序路径获取应用名称
* @return 单例引用
*/
static PathManager& GetInstance();
/**
* @brief 获取配置文件(config.xml)的完整路径
* @return 配置文件的完整路径
*/
QString GetConfigFilePath() const;
/**
* @brief 获取手眼标定文件(EyeHandCalibMatrixInfo.ini)的完整路径
* @return 手眼标定文件的完整路径
*/
QString GetCalibrationFilePath() const;
/**
* @brief 获取应用程序配置目录路径
* @return 配置目录的完整路径
*/
QString GetAppConfigDirectory() const;
/**
* @brief 获取应用程序名称
* @return 应用程序名称
*/
QString GetAppName() const { return m_appName; }
// 禁止拷贝和赋值
PathManager(const PathManager&) = delete;
PathManager& operator=(const PathManager&) = delete;
private:
/**
* @brief 私有构造函数(单例模式)
* @param appName 应用程序名称
*/
explicit PathManager(const QString& appName);
/**
* @brief 确保配置目录存在,如果不存在则创建
* @return 成功创建或目录已存在返回true失败返回false
*/
bool EnsureConfigDirectoryExists();
/**
* @brief 获取程序目录路径
* @return 程序目录的完整路径
*/
QString GetProgramDirectory() const;
/**
* @brief 获取用户配置目录路径仅Linux系统
* @return 用户配置目录的完整路径
*/
QString GetUserConfigDirectory() const;
/**
* @brief 获取配置目录路径(内部方法)
* @return 配置目录的完整路径
*/
QString GetConfigDirectory() const;
private:
QString m_appName; // 应用程序名称
QString m_configFilePath; // 缓存的配置文件路径
QString m_calibrationFilePath; // 缓存的标定文件路径
QString m_configDirectory; // 缓存的配置目录路径
static PathManager* s_instance; // 单例实例指针
static std::mutex s_mutex; // 线程安全的互斥锁
};
#endif // PATHMANAGER_H