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. More... | |
PythonQtObjectPtr | createAsyncioFuture () |
Creates a new asyncio.Future object. More... | |
const QStringList & | sharedLibrarySuffixes () |
get the suffixes that are used for shared libraries More... | |
bool | isPythonQtObjectPtrMetaId (int id) |
returns if the id is the id for PythonQtObjectPtr More... | |
bool | isPythonQtSafeObjectPtrMetaId (int id) |
returns if the id is the id for PythonQtSafeObjectPtr More... | |
bool | isPythonQtAnyObjectPtrMetaId (int id) |
returns if the id is either PythonQtObjectPtr or PythonQtSafeObjectPtr More... | |
void | addWrapperPointer (void *obj, PythonQtInstanceWrapper *wrapper) |
add the wrapper pointer (for reuse if the same obj appears while wrapper still exists) More... | |
void | removeWrapperPointer (void *obj) |
remove the wrapper ptr again More... | |
void | shellClassDeleted (void *shellClass) |
called by destructor of shells to allow invalidation of the Python wrapper More... | |
void * | unwrapForeignWrapper (const QByteArray &classname, PyObject *obj) |
try to unwrap the given object to a C++ pointer using the foreign wrapper factories More... | |
bool | addParentClass (const char *typeName, const char *parentTypeName, int upcastingOffset) |
add parent class relation More... | |
void | addPolymorphicHandler (const char *typeName, PythonQtPolymorphicHandlerCB *cb) |
add a handler for polymorphic downcasting More... | |
PythonQtClassInfo * | lookupClassInfoAndCreateIfNotPresent (const char *typeName) |
lookup existing classinfo and return new if not yet present More... | |
void | removeSignalEmitter (QObject *obj) |
called when a signal emitting QObject is destroyed to remove the signal handler from the hash map More... | |
PyObject * | wrapQObject (QObject *obj) |
wrap the given QObject into a Python object (or return existing wrapper!) More... | |
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) More... | |
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. More... | |
void | registerQObjectClassNames (const QStringList &names) |
void | addDecorators (QObject *o, int decoTypes) |
add a decorator object More... | |
PythonQtClassWrapper * | createNewPythonQtClassWrapper (PythonQtClassInfo *info, PyObject *module, const QByteArray &pythonClassName) |
helper method that creates a PythonQtClassWrapper object (returns a new reference) More... | |
PythonQtInstanceWrapper * | createNewPythonQtInstanceWrapper (QObject *obj, PythonQtClassInfo *info, void *wrappedPtr=nullptr) |
helper method that creates a PythonQtInstanceWrapper object and registers it in the object map More... | |
PythonQtClassInfo * | getClassInfo (const QMetaObject *meta) |
get the class info for a meta object (if available) More... | |
PythonQtClassInfo * | getClassInfo (const QByteArray &className) |
get the class info for a meta object (if available) More... | |
void | registerLazyClass (const QByteArray &name, const QByteArray &moduleToImport) |
PythonQtObjectPtr | createModule (const QString &name, PyObject *pycode) |
creates the new module from the given pycode More... | |
PythonQtClassInfo * | currentClassInfoForClassWrapperCreation () |
get the current class info (for the next PythonQtClassWrapper that is created) and reset it to NULL again More... | |
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 More... | |
PythonQtObjectPtr | pythonQtModule () const |
get access to the PythonQt module More... | |
PythonQt::ProfilingCB * | profilingCB () const |
returns the profiling callback, which may be NULL More... | |
QString | getSignature (PyObject *object) |
determines the signature of the given callable object (similar as pydoc) More... | |
bool | isMethodDescriptor (PyObject *object) const |
returns true if the object is a method descriptor (same as inspect.ismethoddescriptor() in inspect.py) More... | |
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 More... | |
const QMetaObject * | setupDynamicMetaObjectChain (PythonQtClassWrapper *type, const QMetaObject *prototypeMetaObject) |
recursively creates the dynamic meta object chain down to the Qt class wrapper. More... | |
const QMetaObject * | buildDynamicMetaObject (PythonQtClassWrapper *type, const QMetaObject *prototypeMetaObject) |
builds and returns the dynamic meta object for the given type, derived from prototypeMetaObject. More... | |
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. More... | |
void | callMethodInPython (QMetaMethod &method, PythonQtInstanceWrapper *wrapper, void **args) |
calls the given method on Python function with same name. More... | |
Static Public Member Functions | |
static PyObject * | wrapMemoryAsBuffer (const void *data, Py_ssize_t size) |
create a read-only buffer object from the given memory More... | |
static PyObject * | wrapMemoryAsBuffer (void *data, Py_ssize_t size) |
create a read-write buffer object from the given memory More... | |
static PyObject * | createEnumValueInstance (PyObject *enumType, unsigned int enumValue) |
create a new instance of the given enum type with given value (returns a new reference) More... | |
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) More... | |
static PyObject * | dummyTuple () |
the dummy tuple (which is empty and may be used to detected that a wrapper is called from internal wrapper creation More... | |
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 |
void PythonQtPrivate::addDecorators | ( | QObject * | o, |
int | decoTypes | ||
) |
add a decorator object
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
|
static |
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
QString PythonQtPrivate::getSignature | ( | PyObject * | object | ) |
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
bool PythonQtPrivate::isMethodDescriptor | ( | PyObject * | object | ) | const |
returns true if the object is a method descriptor (same as inspect.ismethoddescriptor() in inspect.py)
|
inline |
returns if the id is either PythonQtObjectPtr or PythonQtSafeObjectPtr
Definition at line 691 of file PythonQt.h.
|
inline |
returns if the id is the id for PythonQtObjectPtr
Definition at line 687 of file PythonQt.h.
|
inline |
returns if the id is the id for PythonQtSafeObjectPtr
Definition at line 689 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::removeWrapperPointer | ( | void * | obj | ) |
remove the wrapper ptr again
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.
void PythonQtPrivate::shellClassDeleted | ( | void * | shellClass | ) |
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!)
|
friend |
Definition at line 891 of file PythonQt.h.