QtDBus: Use explicitly meta type name instead of method type

In Qt 6, QMetaType sees the underlying type the compiler knows,
so a "using VariantMapMap = QMap<QString, QVariantMap>" typedef
will fail to match a signature of VariantMapMap to QMap<...>
because qDBusParametersForMethod looks for the method type name
whose QMetaType::fromName lookup will fail later.

Pick-to: 6.6 6.5
Change-Id: I142dc42ca86aa8a96f73424ec5da5780f2c1e6a3
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
Kai Uwe Broulik 2023-10-20 17:36:01 +02:00
parent d7d144b530
commit a668ed44dc

View File

@ -123,7 +123,19 @@ bool qDBusInterfaceInObject(QObject *obj, const QString &interface_name)
// sig must be the normalised signature for the method
int qDBusParametersForMethod(const QMetaMethod &mm, QList<QMetaType> &metaTypes, QString &errorMsg)
{
return qDBusParametersForMethod(mm.parameterTypes(), metaTypes, errorMsg);
QList<QByteArray> parameterTypes;
parameterTypes.reserve(mm.parameterCount());
// Not using QMetaMethod::parameterTypes() since we call QMetaType::fromName below
// where we need any typedefs resolved already.
for (int i = 0; i < mm.parameterCount(); ++i) {
QByteArray typeName = mm.parameterMetaType(i).name();
if (typeName.isEmpty())
typeName = mm.parameterTypeName(i);
parameterTypes.append(typeName);
}
return qDBusParametersForMethod(parameterTypes, metaTypes, errorMsg);
}
#endif // QT_BOOTSTRAPPED