PythonQt
|
internal PythonQt details More...
#include <PythonQt.h>
Public Types | |
enum | DecoratorTypes { StaticDecorator = 1 , ConstructorDecorator = 2 , DestructorDecorator = 4 , InstanceDecorator = 8 , AllDecorators = 0xffff } |
Public Member Functions | |
PythonQtPrivate () | |
~PythonQtPrivate () override | |
void | setTaskDoneCallback (const PythonQtObjectPtr &callable) |
PythonQtObjectPtr | checkAndRunCoroutine (const PythonQtObjectPtr &object) |
Runs the given coroutine (via asyncio), returns a scheduled task if it object is a coroutine. | |
PythonQtObjectPtr | createAsyncioFuture () |
Creates a new asyncio.Future object. | |
const QStringList & | sharedLibrarySuffixes () |
get the suffixes that are used for shared libraries | |
bool | isPythonQtObjectPtrMetaId (int id) |
returns if the id is the id for PythonQtObjectPtr | |
bool | isPythonQtSafeObjectPtrMetaId (int id) |
returns if the id is the id for PythonQtSafeObjectPtr | |
bool | isPythonQtAnyObjectPtrMetaId (int id) |
returns if the id is either PythonQtObjectPtr or PythonQtSafeObjectPtr | |
void | addWrapperPointer (void *obj, PythonQtInstanceWrapper *wrapper) |
add the wrapper pointer (for reuse if the same obj appears while wrapper still exists) | |
void | removeWrapperPointer (void *obj) |
remove the wrapper ptr again | |
void | shellClassDeleted (void *shellClass) |
called by destructor of shells to allow invalidation of the Python wrapper | |
void * | unwrapForeignWrapper (const QByteArray &classname, PyObject *obj) |
try to unwrap the given object to a C++ pointer using the foreign wrapper factories | |
bool | addParentClass (const char *typeName, const char *parentTypeName, int upcastingOffset) |
add parent class relation | |
void | addPolymorphicHandler (const char *typeName, PythonQtPolymorphicHandlerCB *cb) |
add a handler for polymorphic downcasting | |
PythonQtClassInfo * | lookupClassInfoAndCreateIfNotPresent (const char *typeName) |
lookup existing classinfo and return new if not yet present | |
void | removeSignalEmitter (QObject *obj) |
called when a signal emitting QObject is destroyed to remove the signal handler from the hash map | |
PyObject * | wrapQObject (QObject *obj) |
wrap the given QObject into a Python object (or return existing wrapper!) | |
PyObject * | wrapPtr (void *ptr, const QByteArray &name, bool passOwnership=false) |
void | registerClass (const QMetaObject *metaobject, const char *package=nullptr, PythonQtQObjectCreatorFunctionCB *wrapperCreator=nullptr, PythonQtShellSetInstanceWrapperCB *shell=nullptr, PyObject *module=nullptr, int typeSlots=0) |
registers a QObject derived class to PythonQt (this is implicitly called by addObject as well) | |
void | registerCPPClass (const char *typeName, const char *parentTypeName=nullptr, const char *package=nullptr, PythonQtQObjectCreatorFunctionCB *wrapperCreator=nullptr, PythonQtShellSetInstanceWrapperCB *shell=nullptr, PyObject *module=nullptr, int typeSlots=0) |
void | registerGlobalNamespace (const char *typeName, const char *package, PythonQtQObjectCreatorFunctionCB *wrapperCreator, const QMetaObject &metaObject, PyObject *module=nullptr) |
Same as above, but all enums of the created wrapper will also be added to the given package and to the "Qt" package. | |
void | registerQObjectClassNames (const QStringList &names) |
void | addDecorators (QObject *o, int decoTypes) |
add a decorator object | |
PythonQtClassWrapper * | createNewPythonQtClassWrapper (PythonQtClassInfo *info, PyObject *module, const QByteArray &pythonClassName) |
helper method that creates a PythonQtClassWrapper object (returns a new reference) | |
PythonQtInstanceWrapper * | createNewPythonQtInstanceWrapper (QObject *obj, PythonQtClassInfo *info, void *wrappedPtr=nullptr) |
helper method that creates a PythonQtInstanceWrapper object and registers it in the object map | |
PythonQtClassInfo * | getClassInfo (const QMetaObject *meta) |
get the class info for a meta object (if available) | |
PythonQtClassInfo * | getClassInfo (const QByteArray &className) |
get the class info for a meta object (if available) | |
void | registerLazyClass (const QByteArray &name, const QByteArray &moduleToImport) |
PythonQtObjectPtr | createModule (const QString &name, PyObject *pycode) |
creates the new module from the given pycode | |
PythonQtClassInfo * | currentClassInfoForClassWrapperCreation () |
get the current class info (for the next PythonQtClassWrapper that is created) and reset it to NULL again | |
void | handleVirtualOverloadReturnError (const char *signature, const PythonQtMethodInfo *methodInfo, PyObject *result) |
called by virtual overloads when a python return value can not be converted to the required Qt type | |
PythonQtObjectPtr | pythonQtModule () const |
get access to the PythonQt module | |
PythonQt::ProfilingCB * | profilingCB () const |
returns the profiling callback, which may be NULL | |
QString | getSignature (PyObject *object) |
determines the signature of the given callable object (similar as pydoc) | |
bool | isMethodDescriptor (PyObject *object) const |
returns true if the object is a method descriptor (same as inspect.ismethoddescriptor() in inspect.py) | |
const QMetaObject * | getDynamicMetaObject (PythonQtInstanceWrapper *wrapper, const QMetaObject *prototypeMetaObject) |
get the dynamic meta object for the given wrapper. It will contain the signals/slots that have been added in Python | |
const QMetaObject * | setupDynamicMetaObjectChain (PythonQtClassWrapper *type, const QMetaObject *prototypeMetaObject) |
recursively creates the dynamic meta object chain down to the Qt class wrapper. | |
const QMetaObject * | buildDynamicMetaObject (PythonQtClassWrapper *type, const QMetaObject *prototypeMetaObject) |
builds and returns the dynamic meta object for the given type, derived from prototypeMetaObject. | |
int | handleMetaCall (QObject *object, PythonQtInstanceWrapper *wrapper, QMetaObject::Call call, int id, void **args) |
redirected from shell classes, tries to call the given meta call on the Python wrapper. | |
void | callMethodInPython (QMetaMethod &method, PythonQtInstanceWrapper *wrapper, void **args) |
calls the given method on Python function with same name. | |
Static Public Member Functions | |
static PyObject * | wrapMemoryAsBuffer (const void *data, Py_ssize_t size) |
create a read-only buffer object from the given memory | |
static PyObject * | wrapMemoryAsBuffer (void *data, Py_ssize_t size) |
create a read-write buffer object from the given memory | |
static PyObject * | createEnumValueInstance (PyObject *enumType, unsigned int enumValue) |
create a new instance of the given enum type with given value (returns a new reference) | |
static PyObject * | createNewPythonQtEnumWrapper (const char *enumName, PyObject *parentObject) |
helper that creates a new int derived class that represents the enum of the given name (returns a new reference) | |
static PyObject * | dummyTuple () |
the dummy tuple (which is empty and may be used to detected that a wrapper is called from internal wrapper creation | |
Friends | |
class | PythonQt |
internal PythonQt details
Definition at line 657 of file PythonQt.h.
Enumerator | |
---|---|
StaticDecorator | |
ConstructorDecorator | |
DestructorDecorator | |
InstanceDecorator | |
AllDecorators |
Definition at line 665 of file PythonQt.h.
PythonQtPrivate::PythonQtPrivate | ( | ) |
|
override |
bool PythonQtPrivate::addParentClass | ( | const char * | typeName, |
const char * | parentTypeName, | ||
int | upcastingOffset | ||
) |
add parent class relation
void PythonQtPrivate::addPolymorphicHandler | ( | const char * | typeName, |
PythonQtPolymorphicHandlerCB * | cb | ||
) |
add a handler for polymorphic downcasting
void PythonQtPrivate::addWrapperPointer | ( | void * | obj, |
PythonQtInstanceWrapper * | wrapper | ||
) |
add the wrapper pointer (for reuse if the same obj appears while wrapper still exists)
const QMetaObject * PythonQtPrivate::buildDynamicMetaObject | ( | PythonQtClassWrapper * | type, |
const QMetaObject * | prototypeMetaObject | ||
) |
builds and returns the dynamic meta object for the given type, derived from prototypeMetaObject.
void PythonQtPrivate::callMethodInPython | ( | QMetaMethod & | method, |
PythonQtInstanceWrapper * | wrapper, | ||
void ** | args | ||
) |
calls the given method on Python function with same name.
PythonQtObjectPtr PythonQtPrivate::checkAndRunCoroutine | ( | const PythonQtObjectPtr & | object | ) |
Runs the given coroutine (via asyncio), returns a scheduled task if it object is a coroutine.
PythonQtObjectPtr PythonQtPrivate::createAsyncioFuture | ( | ) |
Creates a new asyncio.Future object.
|
static |
create a new instance of the given enum type with given value (returns a new reference)
PythonQtObjectPtr PythonQtPrivate::createModule | ( | const QString & | name, |
PyObject * | pycode | ||
) |
creates the new module from the given pycode
PythonQtClassWrapper * PythonQtPrivate::createNewPythonQtClassWrapper | ( | PythonQtClassInfo * | info, |
PyObject * | module, | ||
const QByteArray & | pythonClassName | ||
) |
helper method that creates a PythonQtClassWrapper object (returns a new reference)
|
static |
helper that creates a new int derived class that represents the enum of the given name (returns a new reference)
PythonQtInstanceWrapper * PythonQtPrivate::createNewPythonQtInstanceWrapper | ( | QObject * | obj, |
PythonQtClassInfo * | info, | ||
void * | wrappedPtr = nullptr |
||
) |
helper method that creates a PythonQtInstanceWrapper object and registers it in the object map
PythonQtClassInfo * PythonQtPrivate::currentClassInfoForClassWrapperCreation | ( | ) |
get the current class info (for the next PythonQtClassWrapper that is created) and reset it to NULL again
the dummy tuple (which is empty and may be used to detected that a wrapper is called from internal wrapper creation
PythonQtClassInfo * PythonQtPrivate::getClassInfo | ( | const QByteArray & | className | ) |
get the class info for a meta object (if available)
PythonQtClassInfo * PythonQtPrivate::getClassInfo | ( | const QMetaObject * | meta | ) |
get the class info for a meta object (if available)
Referenced by PythonQtConvertListOfKnownClassToPythonList(), and PythonQtConvertPythonListToListOfKnownClass().
const QMetaObject * PythonQtPrivate::getDynamicMetaObject | ( | PythonQtInstanceWrapper * | wrapper, |
const QMetaObject * | prototypeMetaObject | ||
) |
get the dynamic meta object for the given wrapper. It will contain the signals/slots that have been added in Python
determines the signature of the given callable object (similar as pydoc)
int PythonQtPrivate::handleMetaCall | ( | QObject * | object, |
PythonQtInstanceWrapper * | wrapper, | ||
QMetaObject::Call | call, | ||
int | id, | ||
void ** | args | ||
) |
redirected from shell classes, tries to call the given meta call on the Python wrapper.
void PythonQtPrivate::handleVirtualOverloadReturnError | ( | const char * | signature, |
const PythonQtMethodInfo * | methodInfo, | ||
PyObject * | result | ||
) |
called by virtual overloads when a python return value can not be converted to the required Qt type
returns true if the object is a method descriptor (same as inspect.ismethoddescriptor() in inspect.py)
returns if the id is either PythonQtObjectPtr or PythonQtSafeObjectPtr
Definition at line 691 of file PythonQt.h.
PythonQtClassInfo * PythonQtPrivate::lookupClassInfoAndCreateIfNotPresent | ( | const char * | typeName | ) |
lookup existing classinfo and return new if not yet present
|
inline |
returns the profiling callback, which may be NULL
Definition at line 793 of file PythonQt.h.
|
inline |
get access to the PythonQt module
Definition at line 790 of file PythonQt.h.
void PythonQtPrivate::registerClass | ( | const QMetaObject * | metaobject, |
const char * | package = nullptr , |
||
PythonQtQObjectCreatorFunctionCB * | wrapperCreator = nullptr , |
||
PythonQtShellSetInstanceWrapperCB * | shell = nullptr , |
||
PyObject * | module = nullptr , |
||
int | typeSlots = 0 |
||
) |
registers a QObject derived class to PythonQt (this is implicitly called by addObject as well)
void PythonQtPrivate::registerCPPClass | ( | const char * | typeName, |
const char * | parentTypeName = nullptr , |
||
const char * | package = nullptr , |
||
PythonQtQObjectCreatorFunctionCB * | wrapperCreator = nullptr , |
||
PythonQtShellSetInstanceWrapperCB * | shell = nullptr , |
||
PyObject * | module = nullptr , |
||
int | typeSlots = 0 |
||
) |
add a wrapper object for the given QMetaType typeName, also does an addClassDecorators() to add constructors for variants (ownership of wrapper is passed to PythonQt)
Make sure that you have done a qRegisterMetaType first, if typeName is a user type!
This will add a wrapper object that is used to make calls to the given classname typeName
. All slots that take a pointer to typeName as the first argument will be callable from Python on a variant object that contains such a type.
void PythonQtPrivate::registerGlobalNamespace | ( | const char * | typeName, |
const char * | package, | ||
PythonQtQObjectCreatorFunctionCB * | wrapperCreator, | ||
const QMetaObject & | metaObject, | ||
PyObject * | module = nullptr |
||
) |
Same as above, but all enums of the created wrapper will also be added to the given package and to the "Qt" package.
void PythonQtPrivate::registerLazyClass | ( | const QByteArray & | name, |
const QByteArray & | moduleToImport | ||
) |
register a class name that causes lazy loading of the moduleToImport when PythonQt encounters the type
void PythonQtPrivate::registerQObjectClassNames | ( | const QStringList & | names | ) |
as an alternative to registerClass, you can tell PythonQt the names of QObject derived classes and it will register the classes when it first sees a pointer to such a derived class
void PythonQtPrivate::removeSignalEmitter | ( | QObject * | obj | ) |
called when a signal emitting QObject is destroyed to remove the signal handler from the hash map
void PythonQtPrivate::setTaskDoneCallback | ( | const PythonQtObjectPtr & | callable | ) |
Set a callable that is used as the argument for the add_done_callback for the Task created by checkAndRunCoroutine
const QMetaObject * PythonQtPrivate::setupDynamicMetaObjectChain | ( | PythonQtClassWrapper * | type, |
const QMetaObject * | prototypeMetaObject | ||
) |
recursively creates the dynamic meta object chain down to the Qt class wrapper.
|
inline |
get the suffixes that are used for shared libraries
Definition at line 684 of file PythonQt.h.
called by destructor of shells to allow invalidation of the Python wrapper
void * PythonQtPrivate::unwrapForeignWrapper | ( | const QByteArray & | classname, |
PyObject * | obj | ||
) |
try to unwrap the given object to a C++ pointer using the foreign wrapper factories
|
static |
create a read-only buffer object from the given memory
|
static |
create a read-write buffer object from the given memory
PyObject * PythonQtPrivate::wrapPtr | ( | void * | ptr, |
const QByteArray & | name, | ||
bool | passOwnership = false |
||
) |
wrap the given ptr into a Python object (or return existing wrapper!) if there is a known QObject of that name or a known wrapper in the factory. If passOwnership == true, the ownership is passed to PythonQt, so the object will be deleted by PythonQt when the Python wrapper goes away.
Referenced by PythonQtConvertListOfKnownClassToPythonList().
PyObject * PythonQtPrivate::wrapQObject | ( | QObject * | obj | ) |
wrap the given QObject into a Python object (or return existing wrapper!)
Definition at line 891 of file PythonQt.h.