From 0a2b25e40985b98d61b435f1f724c0c89339a8e7 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Mon, 20 Apr 2020 17:22:08 +0200 Subject: [PATCH] [PQ] Parsing with default unit, bug fixed --- src/blackmisc/pq/physicalquantity.cpp | 19 +++++++++++++++++-- src/blackmisc/pq/physicalquantity.h | 3 +++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/blackmisc/pq/physicalquantity.cpp b/src/blackmisc/pq/physicalquantity.cpp index 565e4dc53..0b2356943 100644 --- a/src/blackmisc/pq/physicalquantity.cpp +++ b/src/blackmisc/pq/physicalquantity.cpp @@ -453,9 +453,9 @@ namespace BlackMisc template void CPhysicalQuantity::parseFromString(const QString &value, CPqString::SeparatorMode mode, const MU &defaultUnitIfMissing) { - if (is09OnlyString(value)) + if (is09OrSeparatorOnlyString(value)) { - const QString v = value + defaultUnitIfMissing.getName(); + const QString v = value + defaultUnitIfMissing.getSymbol(); this->parseFromString(v, mode); } else @@ -470,6 +470,21 @@ namespace BlackMisc *this = CPqString::parse(value, CPqString::SeparatorQtDefault); } + template + PQ CPhysicalQuantity::parsedFromString(const QString &value, CPqString::SeparatorMode mode, const MU &defaultUnitIfMissing) + { + QString v = value; + if (is09OrSeparatorOnlyString(value)) + { + v = value + defaultUnitIfMissing.getSymbol(); + } + + // no idea why I cannot call pq.parseFromString(v, mode, defaultUnitIfMissing); + PQ pq; + pq.parseFromString(v, mode); + return pq; + } + template PQ CPhysicalQuantity::parsedFromString(const QString &value, CPqString::SeparatorMode mode) { diff --git a/src/blackmisc/pq/physicalquantity.h b/src/blackmisc/pq/physicalquantity.h index b7b8d1380..6699b158f 100644 --- a/src/blackmisc/pq/physicalquantity.h +++ b/src/blackmisc/pq/physicalquantity.h @@ -282,6 +282,9 @@ namespace BlackMisc //! Parsed from given string static PQ parsedFromString(const QString &value, CPqString::SeparatorMode mode = CPqString::SeparatorBestGuess); + //! Parsed from given string + static PQ parsedFromString(const QString &value, CPqString::SeparatorMode mode, const MU &defaultUnitIfMissing); + protected: //! Constructor with double CPhysicalQuantity(double value, MU unit);