From 98a89fb711a15fcf9f541f7b4a8ae7492e5a445c Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Fri, 15 Jan 2021 11:43:03 +0100 Subject: Hardcode a special case of using qOverload for slots without arguments Pick-to: 6.0 Fixes: QTBUG-90308 Change-Id: I35cd45679ded626654dd0e7e3eea8a7bb14c1d56 Reviewed-by: Qt CI Bot Reviewed-by: Jarek Kobus --- src/tools/uic/shared/language.cpp | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) (limited to 'src/tools') diff --git a/src/tools/uic/shared/language.cpp b/src/tools/uic/shared/language.cpp index cbcc7a2b57..48f5830760 100644 --- a/src/tools/uic/shared/language.cpp +++ b/src/tools/uic/shared/language.cpp @@ -387,22 +387,33 @@ void _formatStackVariable(QTextStream &str, const char *className, QStringView v } } +enum OverloadUse { + UseOverload, + UseOverloadWhenNoArguments, // Use overload only when the argument list is empty, + // in this case there is no chance of connecting + // mismatching T against const T & + DontUseOverload +}; + // Format a member function for a signal slot connection static void formatMemberFnPtr(QTextStream &str, const SignalSlot &s, - bool useQOverload = false) + OverloadUse useQOverload = DontUseOverload) { const int parenPos = s.signature.indexOf(QLatin1Char('(')); Q_ASSERT(parenPos >= 0); - if (useQOverload) { - const auto parameters = QStringView{s.signature}.mid(parenPos + 1, - s.signature.size() - parenPos - 2); + const auto functionName = QStringView{s.signature}.left(parenPos); + + const auto parameters = QStringView{s.signature}.mid(parenPos + 1, + s.signature.size() - parenPos - 2); + const bool withOverload = useQOverload == UseOverload || + (useQOverload == UseOverloadWhenNoArguments && parameters.isEmpty()); + + if (withOverload) str << "qOverload<" << parameters << ">("; - } - const auto functionName = QStringView{s.signature}.left(parenPos); str << '&' << s.className << "::" << functionName; - if (useQOverload) + if (withOverload) str << ')'; } @@ -413,7 +424,7 @@ static void formatMemberFnPtrConnection(QTextStream &str, str << "QObject::connect(" << sender.name << ", "; formatMemberFnPtr(str, sender); str << ", " << receiver.name << ", "; - formatMemberFnPtr(str, receiver); + formatMemberFnPtr(str, receiver, UseOverloadWhenNoArguments); str << ')'; } -- cgit v1.2.3