Skip to content

Commit

Permalink
Fix build error with Qt >= 6.5 (fixes #128)
Browse files Browse the repository at this point in the history
  • Loading branch information
thp committed Dec 2, 2023
1 parent 63eb529 commit 4504425
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 2 deletions.
7 changes: 6 additions & 1 deletion docs/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1196,9 +1196,14 @@ flags for compiling and linking against Python on your system.
ChangeLog
=========

Version 1.6.0 (2022-08-05)
Version UNRELEASED (YYYY-MM-DD)
-------------------------------

* Support for Qt 6.5 and newer (backwards-incompatible ``Q_RETURN_ARG()`` change) (fixes #128)

Version 1.6.0 (2022-08-05)
--------------------------

* Support for **Qt 6** (Qt 5 is still supported for now)
* Use ``PyUnicode_AsUTF8`` from Python 3.3 when converting strings; strings returned
from the converter are now valid as long as the ``PyObject`` is alive (previously
Expand Down
19 changes: 18 additions & 1 deletion src/qpython_priv.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand Down

0 comments on commit 4504425

Please sign in to comment.