diff options
Diffstat (limited to 'src/tools')
-rw-r--r-- | src/tools/uic/shared/language.cpp | 27 |
1 files changed, 19 insertions, 8 deletions
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 << ')'; } |