diff options
-rw-r--r-- | qmake/library/qmakebuiltins.cpp | 2 | ||||
-rw-r--r-- | src/corelib/doc/snippets/qversionnumber/main.cpp | 8 | ||||
-rw-r--r-- | src/corelib/tools/qversionnumber.cpp | 53 | ||||
-rw-r--r-- | src/corelib/tools/qversionnumber.h | 4 | ||||
-rw-r--r-- | tests/auto/corelib/tools/qversionnumber/tst_qversionnumber.cpp | 8 |
5 files changed, 66 insertions, 9 deletions
diff --git a/qmake/library/qmakebuiltins.cpp b/qmake/library/qmakebuiltins.cpp index d517aa5a84..b86efa33b4 100644 --- a/qmake/library/qmakebuiltins.cpp +++ b/qmake/library/qmakebuiltins.cpp @@ -1569,7 +1569,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional( return ReturnFalse; } const QVersionNumber lvn = QVersionNumber::fromString(values(args.at(0).toKey()).join('.')); - const QVersionNumber rvn = QVersionNumber::fromString(args.at(1).toQString()); + const QVersionNumber rvn = QVersionNumber::fromString(args.at(1).toQStringView()); if (func_t == T_VERSION_AT_LEAST) return returnBool(lvn >= rvn); return returnBool(lvn <= rvn); diff --git a/src/corelib/doc/snippets/qversionnumber/main.cpp b/src/corelib/doc/snippets/qversionnumber/main.cpp index 0e9997b6dc..50a893603f 100644 --- a/src/corelib/doc/snippets/qversionnumber/main.cpp +++ b/src/corelib/doc/snippets/qversionnumber/main.cpp @@ -95,6 +95,14 @@ void QObject::parse() // version is 5.4.0 // suffixIndex is 5 //! [3] + + //! [3-latin-1] + QLatin1String string("5.4.0-alpha"); + int suffixIndex; + auto version = QVersionNumber::fromString(string, &suffixIndex); + // version is 5.4.0 + // suffixIndex is 5 + //! [3-latin-1] } void Object::equivalent() diff --git a/src/corelib/tools/qversionnumber.cpp b/src/corelib/tools/qversionnumber.cpp index 97e5da8b3c..0f237bce87 100644 --- a/src/corelib/tools/qversionnumber.cpp +++ b/src/corelib/tools/qversionnumber.cpp @@ -406,10 +406,8 @@ QString QVersionNumber::toString() const return version; } +#if QT_STRINGVIEW_LEVEL < 2 /*! - \fn QVersionNumber QVersionNumber::fromString(const QString &string, - int *suffixIndex) - Constructs a QVersionNumber from a specially formatted \a string of non-negative decimal numbers delimited by '.'. @@ -423,14 +421,53 @@ QString QVersionNumber::toString() const */ QVersionNumber QVersionNumber::fromString(const QString &string, int *suffixIndex) { - QVector<int> seg; + return fromString(QLatin1String(string.toLatin1()), suffixIndex); +} +#endif + +/*! + \since 5.10 + \overload + + Constructs a QVersionNumber from a specially formatted \a string of + non-negative decimal numbers delimited by '.'. + + Once the numerical segments have been parsed, the remainder of the string + is considered to be the suffix string. The start index of that string will be + stored in \a suffixIndex if it is not null. + + \snippet qversionnumber/main.cpp 3 + + \sa isNull() +*/ +QVersionNumber QVersionNumber::fromString(QStringView string, int *suffixIndex) +{ + return fromString(QLatin1String(string.toLatin1()), suffixIndex); +} + +/*! + \since 5.10 + \overload - const QByteArray cString(string.toLatin1()); + Constructs a QVersionNumber from a specially formatted \a string of + non-negative decimal numbers delimited by '.'. + + Once the numerical segments have been parsed, the remainder of the string + is considered to be the suffix string. The start index of that string will be + stored in \a suffixIndex if it is not null. + + \snippet qversionnumber/main.cpp 3-latin1-1 + + \sa isNull() +*/ +QVersionNumber QVersionNumber::fromString(QLatin1String string, int *suffixIndex) +{ + QVector<int> seg; - const char *start = cString.constData(); + const char *start = string.begin(); const char *end = start; const char *lastGoodEnd = start; - const char *endOfString = cString.constData() + cString.size(); + const char *endOfString = string.end(); do { bool ok = false; @@ -443,7 +480,7 @@ QVersionNumber QVersionNumber::fromString(const QString &string, int *suffixInde } while (start < endOfString && (end < endOfString && *end == '.')); if (suffixIndex) - *suffixIndex = int(lastGoodEnd - cString.constData()); + *suffixIndex = int(lastGoodEnd - string.begin()); return QVersionNumber(qMove(seg)); } diff --git a/src/corelib/tools/qversionnumber.h b/src/corelib/tools/qversionnumber.h index 2aaa6201f7..a7f91e220c 100644 --- a/src/corelib/tools/qversionnumber.h +++ b/src/corelib/tools/qversionnumber.h @@ -280,7 +280,11 @@ public: Q_CORE_EXPORT static Q_DECL_PURE_FUNCTION QVersionNumber commonPrefix(const QVersionNumber &v1, const QVersionNumber &v2) Q_REQUIRED_RESULT; Q_CORE_EXPORT QString toString() const Q_REQUIRED_RESULT; +#if QT_STRINGVIEW_LEVEL < 2 Q_CORE_EXPORT static Q_DECL_PURE_FUNCTION QVersionNumber fromString(const QString &string, int *suffixIndex = Q_NULLPTR) Q_REQUIRED_RESULT; +#endif + Q_CORE_EXPORT static Q_DECL_PURE_FUNCTION QVersionNumber fromString(QLatin1String string, int *suffixIndex = nullptr) Q_REQUIRED_RESULT; + Q_CORE_EXPORT static Q_DECL_PURE_FUNCTION QVersionNumber fromString(QStringView string, int *suffixIndex = nullptr) Q_REQUIRED_RESULT; private: #ifndef QT_NO_DATASTREAM diff --git a/tests/auto/corelib/tools/qversionnumber/tst_qversionnumber.cpp b/tests/auto/corelib/tools/qversionnumber/tst_qversionnumber.cpp index 2e34e82388..9812d93a50 100644 --- a/tests/auto/corelib/tools/qversionnumber/tst_qversionnumber.cpp +++ b/tests/auto/corelib/tools/qversionnumber/tst_qversionnumber.cpp @@ -513,6 +513,14 @@ void tst_QVersionNumber::fromString() QCOMPARE(QVersionNumber::fromString(constructionString), expectedVersion); QCOMPARE(QVersionNumber::fromString(constructionString, &index), expectedVersion); QCOMPARE(index, suffixIndex); + + QCOMPARE(QVersionNumber::fromString(QStringView(constructionString)), expectedVersion); + QCOMPARE(QVersionNumber::fromString(QStringView(constructionString), &index), expectedVersion); + QCOMPARE(index, suffixIndex); + + QCOMPARE(QVersionNumber::fromString(QLatin1String(constructionString.toLatin1())), expectedVersion); + QCOMPARE(QVersionNumber::fromString(QLatin1String(constructionString.toLatin1()), &index), expectedVersion); + QCOMPARE(index, suffixIndex); } void tst_QVersionNumber::toString_data() |