logplus/Workflow/WFCrystal/Crystal/src/GlobalUtility.cpp
2026-01-16 17:18:41 +08:00

194 lines
4.8 KiB
C++

/**
* @file GlobalUtility.cpp
* @brief 基础工具集合。包含数值字符串之间的转换,
* 父对象子对象的查找,环境变量的获取和磁盘空间
* 的获取等功能。
* @date 2014-11-07
*/
#include <QWidget>
#include <QDir>
//#include <sys/vfs.h>
// #include "Utils.h"
#include "GlobalUtility.h"
namespace pai
{
namespace gui
{
int Percentage(const qreal value)
{
return qRound(value * 100);
}
QString PercentageFormat(const qreal value)
{
return QString("%1").arg(Percentage(value)) + "%";
}
QRect MapToGlobal(QWidget* pWidget, const QRect & localRect)
{
return QRect(pWidget->mapToGlobal(localRect.topLeft()), localRect.size());
}
QRect MapFromGlobal(QWidget *pWidget, const QRect & globalRect)
{
return QRect(pWidget->mapFromGlobal(globalRect.topLeft()), globalRect.size());
}
QString GetPaiTmpHomePath(const QString & tempPath)
{
QString TempPath = tempPath;
QString CompName = "/.wisenergy";
if(!tempPath.startsWith("/"))
{
CompName += "/";
}
if(!tempPath.endsWith("/"))
{
TempPath += "/";
}
QString PaiTmpHomePath = QDir::homePath() + CompName + TempPath;
QDir directory(PaiTmpHomePath);
if(!directory.exists())
{
directory.mkpath(PaiTmpHomePath);
}
return PaiTmpHomePath;
}
long GetDirFreeSpace(const char *pPath)
{
//TODO 跨平台
//struct statfs diskInfo;
//statfs(pPath, &diskInfo);
//return diskInfo.f_bavail * diskInfo.f_bsize;
return 0;
}
long StringToDigitSize(QString quota)
{
double size = 0;
if(quota.isEmpty() || (quota == ErrorTag))
{
size = -1;
}
else
{
QString quotaValue = quota.section(' ', 0, 0);
QString unit = quota.section(' ', 1, 1);
if(unit.isEmpty())
{
size = quotaValue.toDouble();
}
else
{
if(unit == "TB")
{
size = quotaValue.toDouble() * TB_BYTE_COUNT;
}
else if(unit == "GB")
{
size = quotaValue.toDouble() * GB_BYTE_COUNT;
}
else if(unit == "MB")
{
size = quotaValue.toDouble() * MB_BYTE_COUNT;
}
else if(unit == "KB")
{
size = quotaValue.toDouble() * KB_BYTE_COUNT;
}
else
{
size = quotaValue.toDouble();
}
}
}
return static_cast< long > (size);
}
// QString DigitSizeToString(long size, bool moreSpace)
// {
// if(size < 0)
// {
// return ErrorTag;
// }
// else
// {
// QString tmp = QString::fromStdString(pai::utils::CUtils::DigitSizeToString((long long) size));
// if(StringToDigitSize(tmp) == size)
// {
// return tmp;
// }
// else
// {
// bool ok;
// // 将结果分成 整数,小数和单位三部分
// int integerPart = tmp.mid(0, tmp.indexOf('.')).toInt(&ok);
// int decimalPart = tmp.at(tmp.indexOf('.') + 1).digitValue();
// QString unit = tmp.section(' ', 1, 1);
// Q_ASSERT(ok && (decimalPart != -1));
// // 如果需要向上取值,且当转换比原值小时,增加转换值
// if((StringToDigitSize(tmp) < size) && (moreSpace))
// {
// if(++decimalPart == 10)
// {
// decimalPart = 0;
// integerPart++;
// }
// return QString("%1.%2 %3").arg(integerPart).arg(decimalPart).arg(unit);
// }
// // 如果需要向下取值,且当转换比原值大时,减小转换值
// else if((StringToDigitSize(tmp) > size) && (!moreSpace))
// {
// if(--decimalPart == -1)
// {
// decimalPart = 9;
// integerPart--;
// }
// return QString("%1.%2 %3").arg(integerPart).arg(decimalPart).arg(unit);
// }
// }
// return tmp;
// }
// }
bool CaseInsensitiveLessThan(const QString & leftString, const QString & rightString)
{
return leftString.toLower() < rightString.toLower();
}
QString DoubleToQString(double value, int decimal)
{
QString strValue = QString::number(value, 'f', decimal);
if(decimal > 0)
{
while(strValue.endsWith('0') && strValue.at(strValue.length() - 2) != '.')
{
strValue = strValue.remove(strValue.length() - 1, 1);
}
}
else
{
strValue.append(".0");
}
return strValue;
}
QString IntToQString(int value)
{
QString strValue = QString::number(value, 'f', 0);
return strValue;
}
}
}