/** * @file GlobalUtility.h * @brief 基础工具集合。包含数值字符串之间的转换, * 父对象子对象的查找,环境变量的获取和磁盘空间 * 的获取等功能。 * @date 2014-11-07 */ #ifndef PAI_CRYSTAL_GLOBALUTITILITY_H #define PAI_CRYSTAL_GLOBALUTITILITY_H #include #include #include #include "Turtle.h" const QString ErrorTag = "--"; ///< 非法数值无法正确转换成字符串,统一使用此字符串替代 const long KB_BYTE_COUNT = 1024; ///< KB const long MB_BYTE_COUNT = 1024*KB_BYTE_COUNT; ///< MB const long GB_BYTE_COUNT = 1024*MB_BYTE_COUNT; ///< GB const long TB_BYTE_COUNT = 1024*GB_BYTE_COUNT; ///< TB /** * @brief 拒绝关闭宏。 用于在禁止关闭操作时使用。插件中通常在槽函数中使用,可以使用无参 */ #define RejectClosing(); sender()->setProperty("Close", false); /** * @brief 拒绝关闭宏。 用于在禁止关闭操作时使用 * @param[in] pObject 设置的对象 */ #define RejectClosing_P(pObject); pObject->setProperty("Close", false); /** * @brief 允许关闭宏。 用于在允许关闭操作时使用。插件中通常在槽函数中使用,可以使用无参 */ #define AcceptClosing(); sender()->setProperty("Close", true); /** * @brief 拒绝关闭宏。 用于在禁止关闭操作时使用 * @param[in] pObject 设置的对象 */ #define AcceptClosing_P(pObject); pObject->setProperty("Close", true); /** * @brief 判定给定对象是否允许关闭 * @param[in] pObject 判断的对象 */ #define IsCloseable(pObject) pObject->property("Close").toBool() /** * @brief 得到指定控件的第一个指定类型的孩子对象 * @param[in] pObject 指定父对象 */ template< typename T > T* GetFirstChildObject(QObject *pObject) { T *pT = dynamic_cast< T* > (pObject); if(pT != NULL) { return pT; } else { return pObject->findChild< T* > (); } } /** * @brief 得到指定控件的第一个指定类型的父亲控件 * @param[in] pObject 指定子控件 */ template< typename T > T* GetFirstParentObject(QObject *pObject) { QObject *pParentObject = pObject; while(pParentObject != NULL) { T *pT = dynamic_cast< T* > (pParentObject); if(pT != NULL) { return pT; } pParentObject = pParentObject->parent(); } return NULL; } /** * @brief 得到指定控件的最后一个指定类型的父亲对象 * @param[in] pObject 指定子对象 */ template< typename T > T* GetLastParentObject(QObject *pObject) { T *pLastParent = NULL; QObject *pParentObject = pObject; while(pParentObject != NULL) { T *pT = dynamic_cast< T* > (pParentObject); if(pT != NULL) { pLastParent = pT; } pParentObject = pParentObject->parent(); } return pLastParent; } namespace pai { namespace gui { /** * @brief 将一个指定的0~1之间的浮点值转化为百分比的整数值,例如将0.076转化为8 * @param[in] value 指定的浮点值 * @return 百分数值 */ extern PAI_CRYSTAL_EXPORT int Percentage(const qreal value); /** * @brief 将一个指定的0~1之间的浮点值格式化成nn%的字符串,例如将0.076转化为“8%” * @param[in] value 指定的浮点值 * @return 字符串形式 */ extern PAI_CRYSTAL_EXPORT QString PercentageFormat(const qreal value); /** * @brief 将一个窗口的局部坐标系的矩形映射成全屏坐标系的矩形 * @param[in] pWidget 窗口 * @param[in] localRect 局部坐标系的矩形 * @return 全屏坐标系的矩形 */ extern PAI_CRYSTAL_EXPORT QRect MapToGlobal(QWidget *pWidget, const QRect & localRect); /** * @brief 将一个全屏坐标系的矩形窗口的局部坐标系的矩形映射成指定窗口的局部坐标系 * @param[in] pWidget 指定窗口 * @param[in] globalRect 全屏坐标系的矩形 * @return 局部坐标系的矩形 */ extern PAI_CRYSTAL_EXPORT QRect MapFromGlobal(QWidget *pWidget, const QRect & globalRect); /** * @brief 获取用户目录 * @param[in] tempPath 要创建的目录 * @return 创建的目录 */ extern PAI_CRYSTAL_EXPORT QString GetPaiTmpHomePath(const QString & tempPath); /** * @brief 获取指定的磁盘空间大小 * @param[in] pPath 指定的路径 * @return 指定的磁盘空间大小 */ extern PAI_CRYSTAL_EXPORT long GetDirFreeSpace(const char *pPath); /** * @brief 提供由字符串到字节数的转换 * @param[in] quota 字符串 * @return 字节数 */ extern PAI_CRYSTAL_EXPORT long StringToDigitSize(QString quota); /** * @brief 提供由字节数值到字符串的转换 * @param[in] size 字节数 * @param[in] moreSpace 如果为true,则返回的字符串转换成字节后不小于size,否则不大于size * @return 字符串 */ extern PAI_CRYSTAL_EXPORT QString DigitSizeToString(long size, bool moreSpace = false); /** * @brief 比较两个QString的大小,无视大小写 * @param[in] leftString 左值 * @param[in] rightString 右值 * @return leftString > rightString */ extern PAI_CRYSTAL_EXPORT bool CaseInsensitiveLessThan(const QString & leftString, const QString & rightString); /** * @brief 将double类型数据转为QString对象, * 并按照要求格式化字符串:如果小数位没有值,显示一位小数0;如果小数点后有多余0,不显示.如6.1200显示为6.12 * @param[in] value 需要转换的double对象 * @param[in] decimal 转换时小数点位数 * @return QString value */ extern PAI_CRYSTAL_EXPORT QString DoubleToQString(double value, int decimal = 6); /** * @brief 将int类型数据转为非科学计算法的QString对象 * @param[in] value 需要转换的int对象 * @return 转换后的QString value */ extern PAI_CRYSTAL_EXPORT QString IntToQString(int value); } } namespace pai { namespace gui { static const int GRID_LEFT_MARGIN = 20; ///< 布局左边界 static const int GRID_TOP_MARGIN = 20; ///< 布局上边界 static const int GRID_RIGHT_MARGIN = 20; ///< 布局右边界 static const int GRID_BOTTOM_MARGIN = 15; ///< 布局下边界 static const int GRID_H_SPACING = 10; ///< 水平方向控件间间隔 static const int GRID_V_SPACING = 10; ///< 垂直方向控件间间隔 /** * @enmu PAIItemDataRole * @brief 本枚举用来扩展Qt::ItemDataRole,通过该枚举使得树或表格节点上可以区分附加的PAI系统自定义的数据 */ enum PAIItemDataRole { IDRole = 32, ///< 等同于Qt::UserRole,通常用来匹配ID性质的数据 DBIDRole = 33, ///< 通常用来匹配数据库ID性质的数据 HilightRole = 34, ///< 通常用来匹配是否高亮的数据 HintRole = 35, ///< 通常用来匹配提示信息 RenameRole = 36, ///< 通常用来匹配工作流重命名的数据 SearchRole = 37, ///< 通常用来匹配数据树和模块树的搜索操作中的数据 TypeRole = 38, ///< 通常用来区分节点所表示的类型 DataSortRole = 39, ///< 通常用来区分节点代表的排序数据,根据DataSortRole中数据类型和数值进行排序 TextSortRole = 40, ///< 通常用来区分节点代表的排序数据类型,根据TextSortRole中数据类型值VariantType,将text转换成对应数据类型再进行排序 ObjectRole = 41, ///< 用来表示一个对象(通常是指针) ExtendRole = 1000 ///< 各工程需要拓展Role,可从此数值之后,以避免重复【请保证此项置于最后一行】 }; /** * @enum VariantType * @brief 本枚举用来描述Item的数据类型,通常与TextSortRole配合使用 */ enum VariantType { INT = 1, ///< int类型 UINT = 2, ///> unsigned int类型 LONGLONG = 3, ///< longlong类型 FLOAT = 4, ///< float类型 UFLOAT = 5, ///< unsigned float类型 DOUBLE = 6, ///< double类型 UDOUBLE = 7, ///< unsigned double类型 QSTRING = 8, ///< QString类型 DATATIME = 9, ///< QDataTime类型 ExtendDataType = 1000 ///< 各工程需要拓展数据类型,可从此数值之后,以避免重复【请保证此项置于最后一行】 }; /** * @enum DragSource * @brief 描述被拖拽数据的来源 */ enum DragSource { DRAGSOURCE_UserType = 1000 ///< 用户自定义类型需要在该数字后定义 }; /** * @struct DraggedData * @brief 描述被拖拽数据的结构体 */ typedef struct { int dataSource; ///< 数据来源 QString id; ///< 数据唯一表示符 QString dataName; ///< 数据名称 QString dataType; ///< 数据类型 QString reserve; ///< 保留字段(可以为空,也可以定义自己格式的字符串) }DraggedData; } } #endif ///< PAI_CRYSTAL_GLOBALUTITILITY_H