#pragma once #include "Defines.h" #include "iBase_global.h" #include "LlUtils_global.h" /// @brief 该类是一些公有函数库的实现,比较杂 /// @note 通常一些不知道应放在何处的代码可以仍在该类中实现 /// 该类请不要添加成员变量或非静态的方法 class I_UTILSSHARED_EXPORT ZxBaseUtil { public: ZxBaseUtil(); // 获取当前APP文件所在的路径 ..\Bin\Release static QString getAppDir(); // 获得当前DLl文件所在的路径 ..\Bin\Release static QString getDllDir(QString strDll); /// @brief 获取相应的组合路径 /// @param sCategory 对应 defines.h中 s_Dir_Config 之类 /// @param sSubDir 对应 defines.h中 s_SubDir_AlgoConfig 之类 /// @param sTag 对应 defines.h中 s_Tag_Plot 之类 static QString getDirOf(QString sCategory, QString sSubDir = "", QString sTag = "",QString sDll = ""); /// @brief 获取当前项目下的相应的组合路径 /// @param sTag 对应 defines.h中 s_Tag_Plot 之类 static QString getCurProjectDirOf(QString sTag = ""); /// @brief 创建(如果不存在)路径 /// @note 作用包括如下: /// (1)、创建 sDir 目录,如果未创建 /// (2)、\\替换为/,并且确保路径以 / 结尾 /// (3)、去除 ../ 之类的路径(规范) static bool makeSureDir(QString& sDir); /// @brief 拷贝文件夹 /// @param fromDir : 源目录 /// @param toDir : 目标目录 /// @param bCoverIfFileExists : ture:同名时覆盖 false:同名时返回false,终止拷贝 /// @note 返回: ture拷贝成功 false:拷贝未完成 static bool copyDir(const QDir& fromDir, const QDir& toDir, bool bCoverIfFileExists = true); // 把QStringList或QVector转换为QString,为了打印方便 //static QString convert2Str(QStringList vecStr, QString seprator = " "); //static QString convert2Str(QVector vecStr, QString seprator = " "); /// @brief 获取当前打开的工区,对框架接口的封装 //static void setCurrentProject(ZxProjectData* project); /// @brief 上次打开项目, static void setLastProject(const QString& sProjectName); static QString getLastProject(); /// @brief 当前打开的项目 test log static void setCurrentProjectName(const QString& sProjectName); static QString getCurrentProjectName(); /// @brief 当前打开的项目的路径 ../Bin\Test_Data\test log/ static void setCurProjectDir(const QString& sProjectDir); static QString getCurProjectDir(); /// @brief 获取当前工区下某口井的相应的组合路径 /// @param sTag 对应 defines.h中 s_Tag_Plot 之类 static QString getWellDirOf(QString sWellName, QString sTag = "", QString sTagChild = ""); /// @brief 获取当前工区下当前井的相应的组合路径 /// @param sTag 对应 defines.h中 s_Tag_Plot 之类 static QString getCurWellDirOf(QString sTag = ""); /// @brief 设置当前井 static void setCurrentWellName(const QString& s); static QString getCurrentWellName(); static void setCurrentWellCode(const QString& s); static QString getCurrentWellCode(); /// @brief 上次打开路径 static void setLastDir(const QString& sDir); static QString getLastDir(); /// @brief 自定义信息 static void setCustomValue(QString sKey, const QString& s); static QString getCustomValue(QString sKeu); static void setCustomValueEx(QString sKey, const QStringList& list); static QStringList getCustomValueEx(QString sKey); /// @brief 获取当前系统日期 static QString getSysDate(); /// @brief 获取当前系统时间 static QString getSysDateTime(bool bNormalFormat = false); /// @brief 获取当前系统登录用户 static QString getSysUserName(); /// @brief 对项目或项目所在的上一级目录进行个性化设定 /// @param sDir 路径 /// @param bTop 是否项目路径的上一级目录,仅仅为了换个图标而已,也可以修改该参数直接传过来路径 /// bTop仅仅当 sIcon 为空时有效,这次测井软件固定两个图标中的一个 /// @param sIcon 图标路径,绝对路径 /// @note 只有windows平台有效 static bool customProjectFolder(QString sDir, bool bTop = false, QString sIcon = ""); /// @brief 针对Qt暂未找到trimRight之类的接口 /// @note 后续可能封闭该接口 static bool trimStrRight(QString& s); /// @brief 求取坐标轴的刻度显示 /// @param fMin 左值,通常为最小值 /// @param fMax 右值,通常为最大值 /// @param bAxisX 是否X轴 /// @param bLinear 是否线性 /// @param bExpand 是否流量自动扩展一个tick /// @param pVecScales结果存储位置 /// @note 1:通常 fMin < fMax; 对于fMin > fMax 的情况也做了相应处理(返回结果也是倒着) static bool calAxisScales(double& fMin, double& fMax, bool bAxisX, bool bLinear = true, bool bExpand = false, QVector* pVecScales = NULL); /// @brief 随机颜色提取 static QColor getCustomColor(int nIndex); /// @brief 循环迭代删除文件夹 static bool removeDir(const QString &sDir); /// @brief 把文件夹的最后一级重命名 static bool renameDir(const QString& sDir, const QString& sNewLast); /// @brief 循环迭代拷贝文件夹 static bool copyDir(const QString& sFrom, const QString& sTo); /// @brief 判断字符串是否一致,不考虑大小写 static bool isSameStr(QString s1, QString s2); /// @brief 判断字符串是否包括中文字符 static bool strContainsChs(QString s); /// @brief 对字符串进行排序,如果包括中文,则以汉语拼音进行 static bool sortStrList(QStringList& list, bool bAscMode = true); /// @brief 打开文件夹,调用API接口 static void openFolder(QString sDir); /// @brief 获取下一个可以用的标题,默认加_1,_2,_3 /// @param nFixedLen取值如下 /// -1,则加_1,_2,_3 /// 0-1,则加1,2,3,...,10 /// 2+,则加01,02,03,...,10或001,002... static QString getNextOneName(QStringList& listOlds, \ QString& sBase, \ int nFixedLen = -1); // 对于Cross,改为自定义,因为系统的太大,不美观 static void customerCrossCusor(QCursor &o); // 获取字符串表示的double的小数位数 // ”1.230"返回3,”100“返回0 static int getStrDigit(QString s); /// @brief 根据小数位数,获取其字符串 /// @param f:数值 /// @param nDigit:小数位数 > 0 /// @param bAutoAdjust:是否自动调整 /// @param bAutoTrimmed:自动截取末尾0 /// @note 如果bAutoAdjust=1,f=0.0001,nDigit=3则返回“0.0001” static QString getValidStr(double f, \ int nDigit, \ bool bAutoTrimmed = true, \ bool bAutoAdjust = true); /// @brief 根据小数位数,获取其字符串 /// @param v:数值 /// @param nDigit:小数位数 > 0 /// @param bAutoAdjust:是否自动调整 /// @param bAutoTrimmed:自动截取末尾0 /// @note 如果bAutoAdjust=1,f=0.0001,nDigit=3则返回“0.0001” static QString getValidStrEx(QVariant v, \ int nDigit, \ bool bAutoTrimmed = true, \ bool bAutoAdjust = true); // 启动Help static bool startHelp(QString sChm = ""); /// @brief 开启一个一个进程 /// @param sApp 进程名,exe名 /// @param sCmdLine 命令行 /// @param sWorkDir 工作目录 static bool startProcess(QString sApp, \ QString sCmdLine, \ QString sWorkDir = ""); // 判断字符串可否作为路径或者文件明,注:只是判断能否作为文件名或路径名,而不作存在性判断 static bool isValidFileName(const QString s); static bool isValidFilePath(const QString s); /// @brief 获取屏幕Dpi /// @param bX X方向或Y方向 /// @param bPhysicalDpi 物理Dpi还是逻辑Dpi static int getDpi(bool bX = true, bool bPhysicalDpi = true); };