summaryrefslogtreecommitdiffstats
path: root/src/tools/uic/shared/language.cpp
diff options
context:
space:
mode:
authorJarek Kobus <jaroslaw.kobus@qt.io>2021-01-15 11:43:03 +0100
committerJarek Kobus <jaroslaw.kobus@qt.io>2021-01-15 17:39:46 +0100
commit98a89fb711a15fcf9f541f7b4a8ae7492e5a445c (patch)
treea2d34376635d79c6d0c9bf867c32cc7205d7aec5 /src/tools/uic/shared/language.cpp
parent9cd3ff2bdea0d5a009a8284288bbbdaaaec817be (diff)
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 <qt_ci_bot@qt-project.org> Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
Diffstat (limited to 'src/tools/uic/shared/language.cpp')
-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 << ')';
}