diff --git a/src/corelib/kernel/qmetaobject.cpp b/src/corelib/kernel/qmetaobject.cpp index 3d0cfb4b33d..f375a7b8a96 100644 --- a/src/corelib/kernel/qmetaobject.cpp +++ b/src/corelib/kernel/qmetaobject.cpp @@ -163,6 +163,8 @@ static auto parse_scope(QByteArrayView qualifiedKey) noexcept std::optional scope; QByteArrayView key; }; + if (qualifiedKey.startsWith("QFlags<") && qualifiedKey.endsWith('>')) + qualifiedKey.slice(7, qualifiedKey.length() - 8); const auto scopePos = qualifiedKey.lastIndexOf("::"_L1); if (scopePos < 0) return R{std::nullopt, qualifiedKey}; diff --git a/tests/auto/corelib/kernel/qmetaproperty/tst_qmetaproperty.cpp b/tests/auto/corelib/kernel/qmetaproperty/tst_qmetaproperty.cpp index 3bf6211a539..5b3792bcb8d 100644 --- a/tests/auto/corelib/kernel/qmetaproperty/tst_qmetaproperty.cpp +++ b/tests/auto/corelib/kernel/qmetaproperty/tst_qmetaproperty.cpp @@ -41,6 +41,7 @@ class tst_QMetaProperty : public Base Q_PROPERTY(QMap map MEMBER map) Q_PROPERTY(CustomType custom MEMBER custom) Q_PROPERTY(int propWithInheritedSig READ propWithInheritedSig NOTIFY baseSignal) + Q_PROPERTY(QFlags qflags_value MEMBER qflags_value) private slots: void hasStdCppSet(); @@ -52,6 +53,7 @@ private slots: void conversion(); void enumsFlags(); void notifySignalIndex(); + void qflags(); public: enum EnumType { EnumType1 }; @@ -71,6 +73,7 @@ public: QString value7; QMap map; CustomType custom; + QFlags qflags_value; }; void tst_QMetaProperty::hasStdCppSet() @@ -112,6 +115,16 @@ void tst_QMetaProperty::isFinal() QVERIFY(!prop.isFinal()); } +void tst_QMetaProperty::qflags() +{ + const QMetaObject *mo = metaObject(); + + QMetaProperty prop = mo->property(mo->indexOfProperty("qflags_value")); + QVERIFY(prop.isEnumType()); + QVERIFY(prop.isFlagType()); +} + + class MyGadget { Q_GADGET Q_PROPERTY(QString value READ getValue WRITE setValue RESET resetValue)