refs #212, fixed parsing for PQs

* trimmed strings
* renamed to parseToVariant methods avos ambiguity with template method
This commit is contained in:
Klaus Basan
2014-04-26 15:15:18 +02:00
parent ce619e7a50
commit 03580b9cdc
2 changed files with 13 additions and 9 deletions

View File

@@ -90,14 +90,17 @@ namespace BlackMisc
qDBusRegisterMetaType<CPqString>();
}
QVariant CPqString::parse(const QString &value)
/*
* Parse
*/
QVariant CPqString::parseToVariant(const QString &value)
{
QVariant v;
if (value.isEmpty()) return v;
QRegExp rx("^([-+]?[0-9]*\\.?[0-9]+)\\s*(\\D*)$");
if (rx.indexIn(value) < 0) return v;
QString number = rx.cap(1);
QString unit = rx.cap(2);
QString number = rx.cap(1).trimmed();
QString unit = rx.cap(2).trimmed();
if (unit.isEmpty() || number.isEmpty()) return v;
bool success;
double numberD = number.toDouble(&success);

View File

@@ -74,15 +74,16 @@ namespace BlackMisc
//! \brief Register metadata
static void registerMetadata();
//! \brief parse a string value like "100m", "10.3Mhz"
static QVariant parse(const QString &value);
//! Parse a string value like "100m", "10.3Mhz"
static QVariant parseToVariant(const QString &value);
//! \brief parse into concrete type
template <class PQ> static const PQ parse(const QString &symbol)
//! Parse into concrete type
template <class PQ> static PQ parse(const QString &value)
{
PQ invalid;
if (symbol.isEmpty()) return invalid;
QVariant qv = CPqString::parse(symbol);
invalid.setNull();
if (value.isEmpty()) return invalid;
QVariant qv = CPqString::parseToVariant(value);
if (!qv.isNull() && qv.canConvert<PQ>())
{
return qv.value<PQ>();