GrabBag/AppUtils/AppCommon/Inc/PathManager.h

118 lines
3.3 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/)
*
* 用法:
* @code
* // 在应用程序初始化时调用一次
* PathManager::Initialize("GrabBagApp");
*
* // 之后通过实例调用
* PathManager& pm = PathManager::GetInstance();
* QString configPath = pm.GetConfigFilePath();
* QString calibPath = pm.GetCalibrationFilePath();
* @endcode
*/
class PathManager
{
public:
/**
* @brief 初始化单例(必须在使用其他方法前调用)
* @param appName 应用程序名称(如 "GrabBagApp", "LapWeldApp" 等)
* @return 单例引用
*/
static PathManager& Initialize(const std::string& appName);
/**
* @brief 获取单例实例
* @return 单例引用
* @throws std::runtime_error 如果未初始化
*/
static PathManager& GetInstance();
/**
* @brief 检查是否已初始化
* @return true: 已初始化, false: 未初始化
*/
static bool IsInitialized();
/**
* @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