diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2021-08-16 12:26:16 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2021-08-17 09:30:57 +0000 |
commit | 274b8011abce3f1c03dcc86fd8f83f2872468345 (patch) | |
tree | 5b1d105fb3b3b807509f9e369e1f3b710f397ed5 | |
parent | fdaa9b1c10d9a57ca4195bb4337e0cf93c4a356c (diff) |
Designer: Consider alternative class name
... in "Go to Slot".
The class can be referred to as Ui::<class> or UI_<class>.
Fixes: QTCREATORBUG-26013
Change-Id: Ib539855b0360ce5fe06fb3cac664af3967695206
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
-rw-r--r-- | src/plugins/designer/qtcreatorintegration.cpp | 44 |
1 files changed, 26 insertions, 18 deletions
diff --git a/src/plugins/designer/qtcreatorintegration.cpp b/src/plugins/designer/qtcreatorintegration.cpp index 5460377554..6aee60a797 100644 --- a/src/plugins/designer/qtcreatorintegration.cpp +++ b/src/plugins/designer/qtcreatorintegration.cpp @@ -392,12 +392,14 @@ void QtCreatorIntegration::slotNavigateToSlot(const QString &objectName, const Q // Build name of the class as generated by uic, insert Ui namespace // "foo::bar::form" -> "foo::bar::Ui::form" -static inline QString uiClassName(QString formObjectName) +static inline const QStringList uiClassNames(QString formObjectName) { const int indexOfScope = formObjectName.lastIndexOf("::"); const int uiNameSpaceInsertionPos = indexOfScope >= 0 ? indexOfScope + 2 : 0; + QString alt = formObjectName; formObjectName.insert(uiNameSpaceInsertionPos, "Ui::"); - return formObjectName; + alt.insert(uiNameSpaceInsertionPos, "Ui_"); + return {formObjectName, alt}; } static Document::Ptr getParsedDocument(const QString &fileName, @@ -485,28 +487,34 @@ bool QtCreatorIntegration::navigateToSlot(const QString &objectName, QDesignerFormWindowInterface *fwi = FormEditorW::activeWidgetHost()->formWindow(); - const QString uiClass = uiClassName(fwi->mainContainer()->objectName()); - - if (Designer::Constants::Internal::debug) - qDebug() << "Checking docs for " << uiClass; - - // Find the class definition (ui class defined as member or base class) - // in the file itself or in the directly included files (order 1). + QString uiClass; const Class *cl = nullptr; Document::Ptr declDoc; - for (const Document::Ptr &d : qAsConst(docMap)) { - LookupContext context(d, docTable); - const ClassDocumentPtrPair cd = findClassRecursively(context, uiClass, 1u); - if (cd.first) { - cl = cd.first; - declDoc = cd.second; + for (const QString &candidate : uiClassNames(fwi->mainContainer()->objectName())) { + if (Designer::Constants::Internal::debug) + qDebug() << "Checking docs for " << candidate; + + // Find the class definition (ui class defined as member or base class) + // in the file itself or in the directly included files (order 1). + for (const Document::Ptr &d : qAsConst(docMap)) { + LookupContext context(d, docTable); + const ClassDocumentPtrPair cd = findClassRecursively(context, candidate, 1u); + if (cd.first) { + cl = cd.first; + declDoc = cd.second; + break; + } + } + if (cl) { + uiClass = candidate; break; } + + if (errorMessage->isEmpty()) + *errorMessage = msgClassNotFound(candidate, docList); } - if (!cl) { - *errorMessage = msgClassNotFound(uiClass, docList); + if (!cl) return false; - } const QString functionName = "on_" + objectName + '_' + signalSignature; const QString functionNameWithParameterNames = addParameterNames(functionName, parameterNames); |