From 45044252aaf73262cd46443acd049e7afcdf072b Mon Sep 17 00:00:00 2001 From: Thomas Perl Date: Sat, 2 Dec 2023 18:46:06 +0100 Subject: [PATCH] Fix build error with Qt >= 6.5 (fixes #128) --- a/src/qpython_priv.cpp +++ b/src/qpython_priv.cpp @@ -405,8 +405,25 @@ pyotherside_QObjectMethod_call(PyObject *callable_object, PyObject *args, PyObje } QVariant result; +#if QT_VERSION < QT_VERSION_CHECK(6, 5, 0) + QGenericReturnArgument returnArg = Q_RETURN_ARG(QVariant, result); +#else + /** + * Starting with Qt 6.5, Q_RETURN_ARG() expands to a QMetaMethodReturnArgument, + * whereas previously it returned a QGenericReturnArgument. Since we are using + * the old, deprecated QMetaMethod::invoke() functions, and those take a + * QGenericReturnArgument and not a QMetaMethodReturnArgument, we need to + * create the QGenericReturnArgument ourselves by emulating what Q_RETURN_ARG() + * does in old Qt versions before 6.5. + * + * See also: + * https://bugreports.qt.io/browse/QTBUG-113147 + * https://github.com/thp/pyotherside/issues/128 + **/ + QGenericReturnArgument returnArg {QT_STRINGIFY(QVariant), &result}; +#endif if (method.invoke(o, Qt::DirectConnection, - Q_RETURN_ARG(QVariant, result), genericArguments.value(0), + returnArg, genericArguments.value(0), genericArguments.value(1), genericArguments.value(2), genericArguments.value(3), genericArguments.value(4), genericArguments.value(5), genericArguments.value(6),