summaryrefslogtreecommitdiffstats
path: root/src/tools/uic/cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/uic/cpp')
-rw-r--r--src/tools/uic/cpp/cppwriteincludes.cpp3
-rw-r--r--src/tools/uic/cpp/cppwriteinitialization.cpp33
-rw-r--r--src/tools/uic/cpp/cppwriteinitialization.h6
3 files changed, 39 insertions, 3 deletions
diff --git a/src/tools/uic/cpp/cppwriteincludes.cpp b/src/tools/uic/cpp/cppwriteincludes.cpp
index f2e69553c6..b9190b8295 100644
--- a/src/tools/uic/cpp/cppwriteincludes.cpp
+++ b/src/tools/uic/cpp/cppwriteincludes.cpp
@@ -229,6 +229,9 @@ void WriteIncludes::add(const QString &className, bool determineHeader, const QS
return;
}
+ if (cwi->extends(className, QLatin1String("QDialogButtonBox")))
+ add(QLatin1String("QAbstractButton")); // for signal "clicked(QAbstractButton*)"
+
if (determineHeader)
insertIncludeForClass(className, header, global);
}
diff --git a/src/tools/uic/cpp/cppwriteinitialization.cpp b/src/tools/uic/cpp/cppwriteinitialization.cpp
index 2a9efaac95..585313f5de 100644
--- a/src/tools/uic/cpp/cppwriteinitialization.cpp
+++ b/src/tools/uic/cpp/cppwriteinitialization.cpp
@@ -2568,6 +2568,31 @@ WriteInitialization::Declaration WriteInitialization::findDeclaration(const QStr
return {};
}
+bool WriteInitialization::isCustomWidget(const QString &className) const
+{
+ return m_uic->customWidgetsInfo()->customWidget(className) != nullptr;
+}
+
+ConnectionSyntax WriteInitialization::connectionSyntax(const QString &senderSignature,
+ const QString &senderClassName,
+ const QString &receiverClassName) const
+{
+ if (m_option.forceMemberFnPtrConnectionSyntax)
+ return ConnectionSyntax::MemberFunctionPtr;
+ if (m_option.forceStringConnectionSyntax)
+ return ConnectionSyntax::StringBased;
+ // Auto mode: Use Qt 5 connection syntax for Qt classes and parameterless
+ // connections. QAxWidget is special though since it has a fake Meta object.
+ static const QStringList requiresStringSyntax{QStringLiteral("QAxWidget")};
+ if (requiresStringSyntax.contains(senderClassName)
+ || requiresStringSyntax.contains(receiverClassName)) {
+ return ConnectionSyntax::StringBased;
+ }
+ return senderSignature.endsWith(QLatin1String("()"))
+ || (!isCustomWidget(senderClassName) && !isCustomWidget(receiverClassName))
+ ? ConnectionSyntax::MemberFunctionPtr : ConnectionSyntax::StringBased;
+}
+
void WriteInitialization::acceptConnection(DomConnection *connection)
{
const QString senderName = connection->elementSender();
@@ -2584,14 +2609,16 @@ void WriteInitialization::acceptConnection(DomConnection *connection)
fprintf(stderr, "%s\n", qPrintable(message));
return;
}
-
- language::SignalSlot theSignal{senderDecl.name, connection->elementSignal(),
+ const QString senderSignature = connection->elementSignal();
+ language::SignalSlot theSignal{senderDecl.name, senderSignature,
senderDecl.className};
language::SignalSlot theSlot{receiverDecl.name, connection->elementSlot(),
receiverDecl.className};
m_output << m_indent;
- language::formatConnection(m_output, theSignal, theSlot);
+ language::formatConnection(m_output, theSignal, theSlot,
+ connectionSyntax(senderSignature, senderDecl.className,
+ receiverDecl.className));
m_output << language::eol;
}
diff --git a/src/tools/uic/cpp/cppwriteinitialization.h b/src/tools/uic/cpp/cppwriteinitialization.h
index 0a6ddbb3c8..df06358077 100644
--- a/src/tools/uic/cpp/cppwriteinitialization.h
+++ b/src/tools/uic/cpp/cppwriteinitialization.h
@@ -37,6 +37,8 @@
#include <qstack.h>
#include <qtextstream.h>
+enum class ConnectionSyntax;
+
QT_BEGIN_NAMESPACE
class Driver;
@@ -238,6 +240,10 @@ private:
QString writeBrushInitialization(const DomBrush *brush);
void addButtonGroup(const DomWidget *node, const QString &varName);
void addWizardPage(const QString &pageVarName, const DomWidget *page, const QString &parentWidget);
+ bool isCustomWidget(const QString &className) const;
+ ConnectionSyntax connectionSyntax(const QString &senderSignature,
+ const QString &senderClassName,
+ const QString &receiverClassName) const;
const Uic *m_uic;
Driver *m_driver;