aboutsummaryrefslogtreecommitdiffstats
path: root/sources/pyside6/libpyside/dynamicqmetaobject.cpp
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2025-06-11 11:06:31 +0200
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2025-06-17 12:04:42 +0200
commit4aa48368667bee64e48f7c9d6b3a935411d5f23c (patch)
treec19be3cd8624322bcee32272f1d4d410218e6abf /sources/pyside6/libpyside/dynamicqmetaobject.cpp
parent7ae471b49d0f38d7ac1c367bcfa3378f309c6b94 (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.cpp17
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);
}
}