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++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#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(float& fMin,
float& fMax,
bool bAxisX,
bool bLinear = true,
bool bExpand = false,
QVector<float>* 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);
// 获取字符串表示的float的小数位数
// ”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(float 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);
};