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. 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...
 
PythonQtClassInfolookupClassInfoAndCreateIfNotPresent (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...
 
PyObjectwrapQObject (QObject *obj)
 wrap the given QObject into a Python object (or return existing wrapper!) More...
 
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) 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...
 
PythonQtClassWrappercreateNewPythonQtClassWrapper (PythonQtClassInfo *info, PyObject *module, const QByteArray &pythonClassName)
 helper method that creates a PythonQtClassWrapper object (returns a new reference) More...
 
PythonQtInstanceWrappercreateNewPythonQtInstanceWrapper (QObject *obj, PythonQtClassInfo *info, void *wrappedPtr=nullptr)
 helper method that creates a PythonQtInstanceWrapper object and registers it in the object map More...
 
PythonQtClassInfogetClassInfo (const QMetaObject *meta)
 get the class info for a meta object (if available) More...
 
PythonQtClassInfogetClassInfo (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...
 
PythonQtClassInfocurrentClassInfoForClassWrapperCreation ()
 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::ProfilingCBprofilingCB () 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 PyObjectwrapMemoryAsBuffer (const void *data, Py_ssize_t size)
 create a read-only buffer object from the given memory More...
 
static PyObjectwrapMemoryAsBuffer (void *data, Py_ssize_t size)
 create a read-write buffer object from the given memory More...
 
static PyObjectcreateEnumValueInstance (PyObject *enumType, unsigned int enumValue)
 create a new instance of the given enum type with given value (returns a new reference) More...
 
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) More...
 
static PyObjectdummyTuple ()
 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
 

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,
669  InstanceDecorator = 8,
670  AllDecorators = 0xffff
671  };
@ ConstructorDecorator
Definition: PythonQt.h:667

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; }

◆ 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 Function Documentation

◆ PythonQt

friend class PythonQt
friend

Definition at line 891 of file PythonQt.h.


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