diff options
Diffstat (limited to 'src/tools/uic/cpp')
-rw-r--r-- | src/tools/uic/cpp/cppwriteincludes.cpp | 3 | ||||
-rw-r--r-- | src/tools/uic/cpp/cppwriteinitialization.cpp | 33 | ||||
-rw-r--r-- | src/tools/uic/cpp/cppwriteinitialization.h | 6 |
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; |