aboutsummaryrefslogtreecommitdiffstats
path: root/sources/pyside6/PySide6/qtcorehelper.h
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2022-04-28 13:00:23 +0200
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2022-05-10 23:10:45 +0200
commitaae2f599e8215e49747c9b5dce698d35b913c6c7 (patch)
treec0bfa7d49817dbb28563bbff3095f222cd6a6d56 /sources/pyside6/PySide6/qtcorehelper.h
parent92d8353b2e046b226bbcb3da3c4bbc3a2e9cb6d8 (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.h50
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