diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/tools/uic/python/pythonwriteimports.cpp | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/src/tools/uic/python/pythonwriteimports.cpp b/src/tools/uic/python/pythonwriteimports.cpp index be55696683..ce1df2284e 100644 --- a/src/tools/uic/python/pythonwriteimports.cpp +++ b/src/tools/uic/python/pythonwriteimports.cpp @@ -114,11 +114,29 @@ void WriteImports::acceptCustomWidget(DomCustomWidget *node) const auto &className = node->elementClass(); if (className.contains(QLatin1String("::"))) return; // Exclude namespaced names (just to make tests pass). - const QString &qtModule = qtModuleOf(node); + const QString &importModule = qtModuleOf(node); auto &output = m_uic->output(); - if (!qtModule.isEmpty()) - output << "from PySide2." << qtModule << ' '; - output << "import " << className << '\n'; + // For starting importing PySide2 modules + if (!importModule.isEmpty()) { + output << "from "; + if (importModule.startsWith(QLatin1String("Qt"))) + output << "PySide2."; + output << importModule; + if (!className.isEmpty()) + output << " import " << className << "\n\n"; + } else { + // When the elementHeader is not set, we know it's the continuation + // of a PySide2 import or a normal import of another module. + if (!node->elementHeader() || node->elementHeader()->text().isEmpty()) { + output << "import " << className << '\n'; + } else { // When we do have elementHeader, we know it's a relative import. + QString modulePath = node->elementHeader()->text(); + // '.h' is added by default on headers for <customwidget> + if (modulePath.endsWith(QLatin1String(".h"))) + modulePath.chop(2); + output << "from " << modulePath << " import " << className << '\n'; + } + } } } // namespace Python |