summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/tools/uic/shared/language.cpp27
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 << ')';
}