diff options
Diffstat (limited to 'src/corelib/kernel/qmetaobject.cpp')
-rw-r--r-- | src/corelib/kernel/qmetaobject.cpp | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/src/corelib/kernel/qmetaobject.cpp b/src/corelib/kernel/qmetaobject.cpp index f4f75e39e6..2e0dd8e5d2 100644 --- a/src/corelib/kernel/qmetaobject.cpp +++ b/src/corelib/kernel/qmetaobject.cpp @@ -2557,9 +2557,19 @@ int QMetaEnum::value(int index) const */ bool QMetaEnum::isFlag() const { - return mobj && mobj->d.data[handle + 1]; + return mobj && mobj->d.data[handle + 1] & EnumIsFlag; } +/*! + \since 5.8 + + Returns \c true if this enumerator is declared as a C++11 enum class; + otherwise returns false. +*/ +bool QMetaEnum::isScoped() const +{ + return mobj && mobj->d.data[handle + 1] & EnumIsScoped; +} /*! Returns the scope this enumerator was declared in. @@ -2652,15 +2662,16 @@ int QMetaEnum::keysToValue(const char *keys, bool *ok) const return -1; if (ok != 0) *ok = true; - QStringList l = QString::fromLatin1(keys).split(QLatin1Char('|')); - if (l.isEmpty()) + const QString keysString = QString::fromLatin1(keys); + const QVector<QStringRef> splitKeys = keysString.splitRef(QLatin1Char('|')); + if (splitKeys.isEmpty()) return 0; - //#### TODO write proper code, do not use QStringList + // ### TODO write proper code: do not allocate memory, so we can go nothrow int value = 0; int count = mobj->d.data[handle + 2]; int data = mobj->d.data[handle + 3]; - for (int li = 0; li < l.size(); ++li) { - QString trimmed = l.at(li).trimmed(); + for (const QStringRef &untrimmed : splitKeys) { + const QStringRef trimmed = untrimmed.trimmed(); QByteArray qualified_key = trimmed.toLatin1(); const char *key = qualified_key.constData(); uint scope = 0; |