You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nmWATI/Include/iBase/iUtils/ZxBaseUtil.h

208 lines
8.3 KiB
C

#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<QString> 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<double>* 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=1f=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=1f=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);
};