GrabBag/AppUtils/AppCommon/Inc/PathManager.h

118 lines
3.3 KiB
C
Raw Normal View History

#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 QString& 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 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