common/QskMetaInvokable.h

Classes

  Name
class QskMetaInvokable

Functions

  Name
QMetaMethod qskMetaMethod(const QMetaObject * metaObject, const char * methodName)
QMetaMethod qskMetaMethod(const QObject * object, const char * methodName)
void qskInvokeMetaMethod(QObject * object, const QMetaObject * metaObject, int methodIndex, void * args[], Qt::ConnectionType connectionType =Qt::AutoConnection)
void qskInvokeMetaMethod(QObject * object, const QMetaMethod & method, void * args[], Qt::ConnectionType connectionType =Qt::AutoConnection)
void qskInvokeMetaPropertyWrite(QObject * context, const QMetaObject * metaObject, int propertyIndex, void * args[], Qt::ConnectionType connectionType =Qt::AutoConnection)
void qskInvokeMetaPropertyWrite(const QObject * object, const QMetaProperty & , void * args[], Qt::ConnectionType =Qt::AutoConnection)
QMetaMethod qskNotifySignal(const QMetaObject * metaObject, const char * propertyName)
QMetaMethod qskNotifySignal(const QObject * object, const char * propertyName)

Functions Documentation

function qskMetaMethod

QMetaMethod qskMetaMethod(
    const QMetaObject * metaObject,
    const char * methodName
)

function qskMetaMethod

QMetaMethod qskMetaMethod(
    const QObject * object,
    const char * methodName
)

function qskInvokeMetaMethod

void qskInvokeMetaMethod(
    QObject * object,
    const QMetaObject * metaObject,
    int methodIndex,
    void * args[],
    Qt::ConnectionType connectionType =Qt::AutoConnection
)

function qskInvokeMetaMethod

void qskInvokeMetaMethod(
    QObject * object,
    const QMetaMethod & method,
    void * args[],
    Qt::ConnectionType connectionType =Qt::AutoConnection
)

function qskInvokeMetaPropertyWrite

void qskInvokeMetaPropertyWrite(
    QObject * context,
    const QMetaObject * metaObject,
    int propertyIndex,
    void * args[],
    Qt::ConnectionType connectionType =Qt::AutoConnection
)

function qskInvokeMetaPropertyWrite

void qskInvokeMetaPropertyWrite(
    const QObject * object,
    const QMetaProperty & ,
    void * args[],
    Qt::ConnectionType  =Qt::AutoConnection
)

function qskNotifySignal

QMetaMethod qskNotifySignal(
    const QMetaObject * metaObject,
    const char * propertyName
)

function qskNotifySignal

QMetaMethod qskNotifySignal(
    const QObject * object,
    const char * propertyName
)

Source code

/******************************************************************************
 * QSkinny - Copyright (C) 2016 Uwe Rathmann
 * This file may be used under the terms of the QSkinny License, Version 1.0
 *****************************************************************************/

#ifndef QSK_META_INVOKABLE_H
#define QSK_META_INVOKABLE_H

#include "QskGlobal.h"

#include <qmetatype.h>
#include <qnamespace.h>

class QskMetaFunction;
struct QMetaObject;
class QMetaMethod;
class QMetaProperty;
class QObject;
class QByteArray;

class QSK_EXPORT QskMetaInvokable
{
  public:
    enum Type
    {
        Invalid = 0,

        // A QMetaMethod
        MetaMethod,

        // The WRITE accessor of a QMetaProperty
        MetaProperty,

        // A function pointer, for what Qt calls "functor based" callbacks
        MetaFunction
    };

    QskMetaInvokable();

    QskMetaInvokable( const QskMetaFunction& );

    QskMetaInvokable( const QMetaMethod& );
    QskMetaInvokable( const QObject*, const char* methodName );
    QskMetaInvokable( const QMetaObject*, const char* methodName );

    QskMetaInvokable( const QMetaProperty& );

    QskMetaInvokable( const QskMetaInvokable& );

    ~QskMetaInvokable();

    QskMetaInvokable& operator=( const QskMetaInvokable& );

    bool operator==( const QskMetaInvokable& ) const;
    bool operator!=( const QskMetaInvokable& ) const;

    explicit operator bool() const;

    Type type() const;
    bool isNull() const;

    int parameterCount() const;
    int parameterType( int index ) const;

    int returnType() const;

    void invoke( QObject*, void* args[],
        Qt::ConnectionType = Qt::AutoConnection );

    void reset();

    QByteArray name() const;

    QMetaMethod method() const;
    QMetaProperty property() const;
    QskMetaFunction function() const;

  private:
    struct FunctionData
    {
        void* functionCall;
    };

    struct MetaData
    {
        const QMetaObject* metaObject;
        int index; // method or property index
    };

    union
    {
        FunctionData m_functionData;
        MetaData m_metaData;
    };

    int m_type : 3;
};

inline QskMetaInvokable::QskMetaInvokable()
    : m_type( Invalid )
{
}

inline bool QskMetaInvokable::operator!=( const QskMetaInvokable& other ) const
{
    return !( *this == other );
}

inline QskMetaInvokable::operator bool() const
{
    return !isNull();
}

inline QskMetaInvokable::Type QskMetaInvokable::type() const
{
    return static_cast< Type >( m_type );
}

QSK_EXPORT QMetaMethod qskMetaMethod( const QMetaObject*, const char* methodName );
QSK_EXPORT QMetaMethod qskMetaMethod( const QObject*, const char* methodName );

QSK_EXPORT void qskInvokeMetaMethod(
    QObject*, const QMetaObject*, int methodIndex, void* args[],
    Qt::ConnectionType = Qt::AutoConnection );

QSK_EXPORT void qskInvokeMetaMethod(
    QObject*, const QMetaMethod&, void* args[],
    Qt::ConnectionType = Qt::AutoConnection );

QSK_EXPORT void qskInvokeMetaPropertyWrite(
    QObject*, const QMetaObject*, int propertyIndex,
    void* args[], Qt::ConnectionType = Qt::AutoConnection );

QSK_EXPORT void qskInvokeMetaPropertyWrite(
    const QObject* object, const QMetaProperty&,
    void* args[], Qt::ConnectionType = Qt::AutoConnection );

QSK_EXPORT QMetaMethod qskNotifySignal( const QMetaObject*, const char* propertyName );
QSK_EXPORT QMetaMethod qskNotifySignal( const QObject*, const char* propertyName );

Q_DECLARE_METATYPE( QskMetaInvokable )

#endif

Updated on 28 July 2023 at 14:02:29 CEST