summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJarek Kobus <jaroslaw.kobus@qt.io>2021-01-15 11:43:03 +0100
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2021-01-21 15:04:34 +0000
commite0fecdc7bc7b3dbd6a6f9046d43450b3bdd38a60 (patch)
tree702e2e9609d309542f63e9df4c025fe680b60cd4 /src
parentf2eb4b14af4115062c1613d91fcdc37117366cc5 (diff)
Hardcode a special case of using qOverload for slots without arguments
Fixes: QTBUG-90308 Change-Id: I35cd45679ded626654dd0e7e3eea8a7bb14c1d56 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io> (cherry picked from commit 98a89fb711a15fcf9f541f7b4a8ae7492e5a445c) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
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 << ')';
}