GrabBag/AppUtils/AppCommon/Inc/PathManager.h

107 lines
3.1 KiB
C
Raw Normal View History

#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 truefalse
*/
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