dynamicqmetaobject.h 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. // Copyright (C) 2016 The Qt Company Ltd.
  2. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
  3. #ifndef DYNAMICQMETAOBJECT_H
  4. #define DYNAMICQMETAOBJECT_H
  5. #include <sbkpython.h>
  6. #include <pysidemacros.h>
  7. #include <QtCore/qmetaobject.h>
  8. #include <QtCore/qmetaobject.h>
  9. #include <QtCore/qvariant.h>
  10. #include <utility>
  11. class MetaObjectBuilderPrivate;
  12. namespace PySide
  13. {
  14. class PYSIDE_API MetaObjectBuilder
  15. {
  16. Q_DISABLE_COPY_MOVE(MetaObjectBuilder)
  17. public:
  18. using EnumValue = std::pair<QByteArray, QVariant>; // Int/ULongLong
  19. using EnumValues = QList<EnumValue>;
  20. // Plain wrapped Qt types
  21. explicit MetaObjectBuilder(const QMetaObject *metaObject);
  22. // Types defined in Python which are parsed
  23. explicit MetaObjectBuilder(PyTypeObject *type, const QMetaObject *metaObject);
  24. ~MetaObjectBuilder();
  25. int indexOfMethod(QMetaMethod::MethodType mtype, const QByteArray &signature) const;
  26. int indexOfProperty(const QByteArray &name) const;
  27. int addSlot(const QByteArray &signature);
  28. int addSlot(const QByteArray &signature, const QByteArray &type);
  29. int addSignal(const QByteArray &signature);
  30. void removeMethod(QMetaMethod::MethodType mtype, int index);
  31. int addProperty(const char *property, PyObject *data);
  32. void addInfo(const char *key, const char *value);
  33. void addInfo(const QMap<QByteArray, QByteArray> &info);
  34. void addEnumerator(const char *name, bool flag,
  35. bool scoped, const EnumValues &entries);
  36. void removeProperty(int index);
  37. const QMetaObject *update();
  38. static QString formatMetaObject(const QMetaObject *metaObject);
  39. private:
  40. MetaObjectBuilderPrivate *m_d;
  41. };
  42. }
  43. #endif