1#ifndef DA_QSTRING_CAST_H
2#define DA_QSTRING_CAST_H
14#ifndef DA_QSTRINGCAST_TOQSTRING_NUMBER
15#define DA_QSTRINGCAST_TOQSTRING_NUMBER(type) \
17 inline QString toQString< type >(const type& value) \
19 return QString::number(value); \
23#ifndef DA_QSTRINGCAST_FROMQSTRING_NUMBER
24#define DA_QSTRINGCAST_FROMQSTRING_NUMBER(type, castFunName) \
26 inline bool fromQString< type >(const QString& str, type& result) \
29 auto r = str.castFunName(&ok); \
37#ifndef DA_QSTRINGCAST_FROMQSTRING_DIRECT
38#define DA_QSTRINGCAST_FROMQSTRING_DIRECT(type, castFunName) \
40 inline bool fromQString< type >(const QString& str, type& result) \
42 result = str.castFunName(); \
73 static_assert(
true,
"You must provide a specialization of toQString for your type.");
77DA_QSTRINGCAST_TOQSTRING_NUMBER(
int)
78DA_QSTRINGCAST_TOQSTRING_NUMBER(
unsigned int)
79DA_QSTRINGCAST_TOQSTRING_NUMBER(
long)
80DA_QSTRINGCAST_TOQSTRING_NUMBER(
unsigned long)
81DA_QSTRINGCAST_TOQSTRING_NUMBER(
long long)
82DA_QSTRINGCAST_TOQSTRING_NUMBER(
unsigned long long)
94 return QString::number(value, 10, p);
107 return QString::number(value, 10, p);
116template<
typename T >
119 static_assert(
true,
"You must provide a specialization of fromQString for your type.");
123DA_QSTRINGCAST_FROMQSTRING_NUMBER(
short, toShort)
124DA_QSTRINGCAST_FROMQSTRING_NUMBER(
unsigned short, toUShort)
125DA_QSTRINGCAST_FROMQSTRING_NUMBER(
int, toInt)
126DA_QSTRINGCAST_FROMQSTRING_NUMBER(
unsigned int, toUInt)
127DA_QSTRINGCAST_FROMQSTRING_NUMBER(
long, toLong)
128DA_QSTRINGCAST_FROMQSTRING_NUMBER(
unsigned long, toULong)
129DA_QSTRINGCAST_FROMQSTRING_NUMBER(
long long, toLongLong)
130DA_QSTRINGCAST_FROMQSTRING_NUMBER(
unsigned long long, toULongLong)
131DA_QSTRINGCAST_FROMQSTRING_NUMBER(
float, toFloat)
132DA_QSTRINGCAST_FROMQSTRING_NUMBER(
double, toDouble)
133DA_QSTRINGCAST_FROMQSTRING_DIRECT(std::string, toStdString)
134DA_QSTRINGCAST_FROMQSTRING_DIRECT(std::u16string, toStdU16String)
135DA_QSTRINGCAST_FROMQSTRING_DIRECT(std::u32string, toStdU32String)
136DA_QSTRINGCAST_FROMQSTRING_DIRECT(std::wstring, toStdWString)
145 double absValue = std::fabs(value);
146 double log10Value = std::log10(absValue);
149 int precision =
static_cast< int >(-std::floor(log10Value)) + 3;
152 }
else if (precision > 15) {
序列化类都是带异常的,使用中需要处理异常
Definition AppMainWindow.cpp:44
int calculatePrecision(double value)
精度计算,可以通过此函数确认浮点数转换时所需要的精度 由于此函数使用在本文件的各种模板函数中,因此必须定义为内联
Definition da_qstring_cast.h:138
QString toQString< float >(const float &value)
特化float
Definition da_qstring_cast.h:103
QString toQString< double >(const double &value)
特化double
Definition da_qstring_cast.h:90
QString toQString(const T &value)
toQString
Definition da_qstring_cast.h:71
bool fromQString(const QString &str, T &result)
将QString转换为类型T,通过引用返回转换结果,并返回一个bool值表示转换是否成功
Definition da_qstring_cast.h:117