diff options
| author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2025-06-11 11:06:31 +0200 |
|---|---|---|
| committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2025-06-17 12:04:42 +0200 |
| commit | 4aa48368667bee64e48f7c9d6b3a935411d5f23c (patch) | |
| tree | c19be3cd8624322bcee32272f1d4d410218e6abf /sources/pyside6/libpyside/dynamicqmetaobject.cpp | |
| parent | 7ae471b49d0f38d7ac1c367bcfa3378f309c6b94 (diff) | |
Enable using @QEnum/@QFlag-decorated enums as custom widget properties
Create a dynamic QMetaType for @QEnum-decorated enumerations so that Qt
Widgets Designer is able to recognize the properties.
[ChangeLog][PySide6] It is now possible to use @QEnum/@QFlag-decorated
enumerations as properties of custom widgets in Qt Widgets Designer.
Task-number: PYSIDE-2840
Change-Id: I58a16002f89678856b7f33d687cf99f00c6f0cc7
Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
Diffstat (limited to 'sources/pyside6/libpyside/dynamicqmetaobject.cpp')
| -rw-r--r-- | sources/pyside6/libpyside/dynamicqmetaobject.cpp | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/sources/pyside6/libpyside/dynamicqmetaobject.cpp b/sources/pyside6/libpyside/dynamicqmetaobject.cpp index a3b718d83..54e814523 100644 --- a/sources/pyside6/libpyside/dynamicqmetaobject.cpp +++ b/sources/pyside6/libpyside/dynamicqmetaobject.cpp @@ -63,8 +63,8 @@ public: int addProperty(const QByteArray &property, PyObject *data); void addInfo(const QByteArray &key, const QByteArray &value); void addInfo(const QMap<QByteArray, QByteArray> &info); - void addEnumerator(const char *name, bool flag, bool scoped, - const MetaObjectBuilder::EnumValues &entries); + QMetaEnumBuilder addEnumerator(const char *name, bool flag, bool scoped, + const MetaObjectBuilder::EnumValues &entries); void removeProperty(int index); const QMetaObject *update(); @@ -384,8 +384,9 @@ void MetaObjectBuilder::addEnumerator(const char *name, bool flag, bool scoped, m_d->addEnumerator(name, flag, scoped, entries); } -void MetaObjectBuilderPrivate::addEnumerator(const char *name, bool flag, bool scoped, - const MetaObjectBuilder::EnumValues &entries) +QMetaEnumBuilder + MetaObjectBuilderPrivate::addEnumerator(const char *name, bool flag, bool scoped, + const MetaObjectBuilder::EnumValues &entries) { auto *builder = ensureBuilder(); int have_already = builder->indexOfEnumerator(name); @@ -398,6 +399,7 @@ void MetaObjectBuilderPrivate::addEnumerator(const char *name, bool flag, bool s for (const auto &item : entries) enumbuilder.addKey(item.first, item.second); m_dirty = true; + return enumbuilder; } void MetaObjectBuilderPrivate::removeProperty(int index) @@ -686,6 +688,11 @@ void MetaObjectBuilderPrivate::parsePythonType(PyTypeObject *type) auto ivalue = PyLong_AsSsize_t(value); entries.push_back(std::make_pair(ckey, int(ivalue))); } - addEnumerator(name, isFlag, true, entries); + auto enumBuilder = addEnumerator(name, isFlag, true, entries); + QByteArray qualifiedName = ensureBuilder()->className() + "::"_ba + name; + auto metaType = + PySide::QEnum::createGenericEnumMetaType(qualifiedName, + reinterpret_cast<PyTypeObject *>(obEnumType)); + enumBuilder.setMetaType(metaType); } } |
