PythonQt
Public Types | Public Member Functions | Static Public Member Functions | Friends | List of all members
PythonQtPrivate Class Reference

internal PythonQt details More...

#include <PythonQt.h>

Inheritance diagram for PythonQtPrivate:

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 QStringListsharedLibrarySuffixes ()
 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
 
voidunwrapForeignWrapper (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
 
PythonQtClassInfolookupClassInfoAndCreateIfNotPresent (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
 
PyObjectwrapQObject (QObject *obj)
 wrap the given QObject into a Python object (or return existing wrapper!)
 
PyObjectwrapPtr (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
 
PythonQtClassWrappercreateNewPythonQtClassWrapper (PythonQtClassInfo *info, PyObject *module, const QByteArray &pythonClassName)
 helper method that creates a PythonQtClassWrapper object (returns a new reference)
 
PythonQtInstanceWrappercreateNewPythonQtInstanceWrapper (QObject *obj, PythonQtClassInfo *info, void *wrappedPtr=nullptr)
 helper method that creates a PythonQtInstanceWrapper object and registers it in the object map
 
PythonQtClassInfogetClassInfo (const QMetaObject *meta)
 get the class info for a meta object (if available)
 
PythonQtClassInfogetClassInfo (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
 
PythonQtClassInfocurrentClassInfoForClassWrapperCreation ()
 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::ProfilingCBprofilingCB () 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 QMetaObjectgetDynamicMetaObject (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 QMetaObjectsetupDynamicMetaObjectChain (PythonQtClassWrapper *type, const QMetaObject *prototypeMetaObject)
 recursively creates the dynamic meta object chain down to the Qt class wrapper.
 
const QMetaObjectbuildDynamicMetaObject (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 PyObjectwrapMemoryAsBuffer (const void *data, Py_ssize_t size)
 create a read-only buffer object from the given memory
 
static PyObjectwrapMemoryAsBuffer (void *data, Py_ssize_t size)
 create a read-write buffer object from the given memory
 
static PyObjectcreateEnumValueInstance (PyObject *enumType, unsigned int enumValue)
 create a new instance of the given enum type with given value (returns a new reference)
 
static PyObjectcreateNewPythonQtEnumWrapper (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 PyObjectdummyTuple ()
 the dummy tuple (which is empty and may be used to detected that a wrapper is called from internal wrapper creation
 

Friends

class PythonQt
 

Detailed Description

internal PythonQt details

Definition at line 657 of file PythonQt.h.

Member Enumeration Documentation

◆ DecoratorTypes

Enumerator
StaticDecorator 
ConstructorDecorator 
DestructorDecorator 
InstanceDecorator 
AllDecorators 

Definition at line 665 of file PythonQt.h.

665 {
666 StaticDecorator = 1,
670 AllDecorators = 0xffff
671 };

Constructor & Destructor Documentation

◆ PythonQtPrivate()

PythonQtPrivate::PythonQtPrivate ( )

◆ ~PythonQtPrivate()

PythonQtPrivate::~PythonQtPrivate ( )
override

Member Function Documentation

◆ addDecorators()

void PythonQtPrivate::addDecorators ( QObject *  o,
int  decoTypes 
)

add a decorator object

◆ addParentClass()

bool PythonQtPrivate::addParentClass ( const char typeName,
const char parentTypeName,
int  upcastingOffset 
)

add parent class relation

◆ addPolymorphicHandler()

void PythonQtPrivate::addPolymorphicHandler ( const char typeName,
PythonQtPolymorphicHandlerCB cb 
)

add a handler for polymorphic downcasting

◆ addWrapperPointer()

void PythonQtPrivate::addWrapperPointer ( void obj,
PythonQtInstanceWrapper wrapper 
)

add the wrapper pointer (for reuse if the same obj appears while wrapper still exists)

◆ buildDynamicMetaObject()

const QMetaObject * PythonQtPrivate::buildDynamicMetaObject ( PythonQtClassWrapper type,
const QMetaObject prototypeMetaObject 
)

builds and returns the dynamic meta object for the given type, derived from prototypeMetaObject.

◆ callMethodInPython()

void PythonQtPrivate::callMethodInPython ( QMetaMethod method,
PythonQtInstanceWrapper wrapper,
void **  args 
)

calls the given method on Python function with same name.

◆ checkAndRunCoroutine()

PythonQtObjectPtr PythonQtPrivate::checkAndRunCoroutine ( const PythonQtObjectPtr object)

Runs the given coroutine (via asyncio), returns a scheduled task if it object is a coroutine.

◆ createAsyncioFuture()

PythonQtObjectPtr PythonQtPrivate::createAsyncioFuture ( )

Creates a new asyncio.Future object.

◆ createEnumValueInstance()

static PyObject * PythonQtPrivate::createEnumValueInstance ( PyObject enumType,
unsigned int  enumValue 
)
static

create a new instance of the given enum type with given value (returns a new reference)

◆ createModule()

PythonQtObjectPtr PythonQtPrivate::createModule ( const QString name,
PyObject pycode 
)

creates the new module from the given pycode

◆ createNewPythonQtClassWrapper()

PythonQtClassWrapper * PythonQtPrivate::createNewPythonQtClassWrapper ( PythonQtClassInfo info,
PyObject module,
const QByteArray pythonClassName 
)

helper method that creates a PythonQtClassWrapper object (returns a new reference)

◆ createNewPythonQtEnumWrapper()

static PyObject * PythonQtPrivate::createNewPythonQtEnumWrapper ( const char enumName,
PyObject parentObject 
)
static

helper that creates a new int derived class that represents the enum of the given name (returns a new reference)

◆ createNewPythonQtInstanceWrapper()

PythonQtInstanceWrapper * PythonQtPrivate::createNewPythonQtInstanceWrapper ( QObject *  obj,
PythonQtClassInfo info,
void wrappedPtr = nullptr 
)

helper method that creates a PythonQtInstanceWrapper object and registers it in the object map

◆ currentClassInfoForClassWrapperCreation()

PythonQtClassInfo * PythonQtPrivate::currentClassInfoForClassWrapperCreation ( )

get the current class info (for the next PythonQtClassWrapper that is created) and reset it to NULL again

◆ dummyTuple()

static PyObject * PythonQtPrivate::dummyTuple ( )
static

the dummy tuple (which is empty and may be used to detected that a wrapper is called from internal wrapper creation

◆ getClassInfo() [1/2]

PythonQtClassInfo * PythonQtPrivate::getClassInfo ( const QByteArray className)

get the class info for a meta object (if available)

◆ getClassInfo() [2/2]

PythonQtClassInfo * PythonQtPrivate::getClassInfo ( const QMetaObject meta)

get the class info for a meta object (if available)

Referenced by PythonQtConvertListOfKnownClassToPythonList(), and PythonQtConvertPythonListToListOfKnownClass().

◆ getDynamicMetaObject()

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

◆ getSignature()

QString PythonQtPrivate::getSignature ( PyObject object)

determines the signature of the given callable object (similar as pydoc)

◆ handleMetaCall()

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.

◆ handleVirtualOverloadReturnError()

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

◆ isMethodDescriptor()

bool PythonQtPrivate::isMethodDescriptor ( PyObject object) const

returns true if the object is a method descriptor (same as inspect.ismethoddescriptor() in inspect.py)

◆ isPythonQtAnyObjectPtrMetaId()

bool PythonQtPrivate::isPythonQtAnyObjectPtrMetaId ( int  id)
inline

returns if the id is either PythonQtObjectPtr or PythonQtSafeObjectPtr

Definition at line 691 of file PythonQt.h.

691{ return _PythonQtObjectPtr_metaId == id || _PythonQtSafeObjectPtr_metaId == id; }
PyObject * PythonQtConvertPairToPython(const void *inPair, int metaTypeId)

◆ isPythonQtObjectPtrMetaId()

bool PythonQtPrivate::isPythonQtObjectPtrMetaId ( int  id)
inline

returns if the id is the id for PythonQtObjectPtr

Definition at line 687 of file PythonQt.h.

687{ return _PythonQtObjectPtr_metaId == id; }

◆ isPythonQtSafeObjectPtrMetaId()

bool PythonQtPrivate::isPythonQtSafeObjectPtrMetaId ( int  id)
inline

returns if the id is the id for PythonQtSafeObjectPtr

Definition at line 689 of file PythonQt.h.

689{ return _PythonQtSafeObjectPtr_metaId == id; }

◆ lookupClassInfoAndCreateIfNotPresent()

PythonQtClassInfo * PythonQtPrivate::lookupClassInfoAndCreateIfNotPresent ( const char typeName)

lookup existing classinfo and return new if not yet present

◆ profilingCB()

PythonQt::ProfilingCB * PythonQtPrivate::profilingCB ( ) const
inline

returns the profiling callback, which may be NULL

Definition at line 793 of file PythonQt.h.

793{ return _profilingCB; }

◆ pythonQtModule()

PythonQtObjectPtr PythonQtPrivate::pythonQtModule ( ) const
inline

get access to the PythonQt module

Definition at line 790 of file PythonQt.h.

790{ return _pythonQtModule; }

◆ registerClass()

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)

◆ registerCPPClass()

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.

◆ registerGlobalNamespace()

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.

◆ registerLazyClass()

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

◆ registerQObjectClassNames()

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

◆ removeSignalEmitter()

void PythonQtPrivate::removeSignalEmitter ( QObject *  obj)

called when a signal emitting QObject is destroyed to remove the signal handler from the hash map

◆ removeWrapperPointer()

void PythonQtPrivate::removeWrapperPointer ( void obj)

remove the wrapper ptr again

◆ setTaskDoneCallback()

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

◆ setupDynamicMetaObjectChain()

const QMetaObject * PythonQtPrivate::setupDynamicMetaObjectChain ( PythonQtClassWrapper type,
const QMetaObject prototypeMetaObject 
)

recursively creates the dynamic meta object chain down to the Qt class wrapper.

◆ sharedLibrarySuffixes()

const QStringList & PythonQtPrivate::sharedLibrarySuffixes ( )
inline

get the suffixes that are used for shared libraries

Definition at line 684 of file PythonQt.h.

684{ return _sharedLibrarySuffixes; }

◆ shellClassDeleted()

void PythonQtPrivate::shellClassDeleted ( void shellClass)

called by destructor of shells to allow invalidation of the Python wrapper

◆ unwrapForeignWrapper()

void * PythonQtPrivate::unwrapForeignWrapper ( const QByteArray classname,
PyObject obj 
)

try to unwrap the given object to a C++ pointer using the foreign wrapper factories

◆ wrapMemoryAsBuffer() [1/2]

static PyObject * PythonQtPrivate::wrapMemoryAsBuffer ( const void data,
Py_ssize_t  size 
)
static

create a read-only buffer object from the given memory

◆ wrapMemoryAsBuffer() [2/2]

static PyObject * PythonQtPrivate::wrapMemoryAsBuffer ( void data,
Py_ssize_t  size 
)
static

create a read-write buffer object from the given memory

◆ wrapPtr()

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().

◆ wrapQObject()

PyObject * PythonQtPrivate::wrapQObject ( QObject *  obj)

wrap the given QObject into a Python object (or return existing wrapper!)

Friends And Related Symbol Documentation

◆ PythonQt

Definition at line 891 of file PythonQt.h.


The documentation for this class was generated from the following file: