diff options
| author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2022-04-28 13:00:23 +0200 |
|---|---|---|
| committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2022-05-10 23:10:45 +0200 |
| commit | aae2f599e8215e49747c9b5dce698d35b913c6c7 (patch) | |
| tree | c0bfa7d49817dbb28563bbff3095f222cd6a6d56 /sources/pyside6/PySide6/qtcorehelper.h | |
| parent | 92d8353b2e046b226bbcb3da3c4bbc3a2e9cb6d8 (diff) | |
Implement Q_ARG/Q_RETURN_ARG for QMetaObject.invokeMethod() with arguments
Introduce an internal type QGeneric(Return)ArgumentHolder which casts
to QGeneric(Return)Argument and stores a QMetaType along with a data
pointer. It is returned by Q_ARG/Q_RETURN_ARG and then handled in
QMetaObject.invokeMethod().
Fixes: PYSIDE-1898
Change-Id: I229cb03d5d71c3b32a2e1eb4040f7641b8e49000
Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
Diffstat (limited to 'sources/pyside6/PySide6/qtcorehelper.h')
| -rw-r--r-- | sources/pyside6/PySide6/qtcorehelper.h | 50 |
1 files changed, 49 insertions, 1 deletions
diff --git a/sources/pyside6/PySide6/qtcorehelper.h b/sources/pyside6/PySide6/qtcorehelper.h index 22b87fc0e..8b0614839 100644 --- a/sources/pyside6/PySide6/qtcorehelper.h +++ b/sources/pyside6/PySide6/qtcorehelper.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2020 The Qt Company Ltd. +** Copyright (C) 2022 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of Qt for Python. @@ -40,7 +40,10 @@ #ifndef QTCOREHELPER_H #define QTCOREHELPER_H +#include <QtCore/qsharedpointer.h> #include <QtCore/qmutex.h> +#include <QtCore/qobjectdefs.h> + namespace QtCoreHelper { @@ -101,6 +104,51 @@ namespace QtCoreHelper { RecursiveMutexLocker *m_recursiveMutexLocker = nullptr; }; + class QGenericArgumentData; + + // Return value of function Q_ARG() to be passed to QMetaObject::invokeMethod. + // Frees the data if it is an allocated, primitive type. + class QGenericArgumentHolder { + public: + QGenericArgumentHolder(); + explicit QGenericArgumentHolder(const QMetaType &type, const void *aData); + QGenericArgumentHolder(const QGenericArgumentHolder &); + QGenericArgumentHolder(QGenericArgumentHolder &&); + QGenericArgumentHolder &operator=(const QGenericArgumentHolder &); + QGenericArgumentHolder &operator=(QGenericArgumentHolder &&); + ~QGenericArgumentHolder(); + + operator QGenericArgument () const; + + QMetaType metaType() const; + const void *data() const; + + private: + QSharedPointer<QGenericArgumentData> d; + }; + + class QGenericReturnArgumentData; + + // Return value of function Q_RETURN_ARG() to be passed to QMetaObject::invokeMethod. + // Frees the data if it is an allocated, primitive type. + class QGenericReturnArgumentHolder { + public: + explicit QGenericReturnArgumentHolder(const QMetaType &type, void *aData); + QGenericReturnArgumentHolder(const QGenericReturnArgumentHolder &); + QGenericReturnArgumentHolder(QGenericReturnArgumentHolder &&); + QGenericReturnArgumentHolder &operator=(const QGenericReturnArgumentHolder &); + QGenericReturnArgumentHolder &operator=(QGenericReturnArgumentHolder &&); + ~QGenericReturnArgumentHolder(); + + operator QGenericReturnArgument () const; + + QMetaType metaType() const; + const void *data() const; + + private: + QSharedPointer<QGenericReturnArgumentData> d; + }; + } // namespace QtCoreHelper #endif // QTCOREHELPER_H |
