diff --git a/src/plugins/qt4projectmanager/wizards/consoleappwizarddialog.cpp b/src/plugins/qt4projectmanager/wizards/consoleappwizarddialog.cpp
index 1ed287c44ddf1bd73b0e8fa6fa10a417e6925100..9a67aa42e2e9c1214ee525ee0c9e925188204429 100644
--- a/src/plugins/qt4projectmanager/wizards/consoleappwizarddialog.cpp
+++ b/src/plugins/qt4projectmanager/wizards/consoleappwizarddialog.cpp
@@ -68,8 +68,8 @@ QtProjectParameters ConsoleAppWizardDialog::parameters() const
     rc.fileName = projectName();
     rc.path = path();
 
-    rc.selectedModules = selectedModules();
-    rc.deselectedModules = deselectedModules();
+    rc.selectedModules = selectedModulesList();
+    rc.deselectedModules = deselectedModulesList();
     return rc;
 }
 
diff --git a/src/plugins/qt4projectmanager/wizards/guiappwizarddialog.cpp b/src/plugins/qt4projectmanager/wizards/guiappwizarddialog.cpp
index ab065de3af7a0ade0ccbd8a8435e625e5d163512..b13f4cbca68569cdf1757a9235ceff6f431440c0 100644
--- a/src/plugins/qt4projectmanager/wizards/guiappwizarddialog.cpp
+++ b/src/plugins/qt4projectmanager/wizards/guiappwizarddialog.cpp
@@ -98,10 +98,11 @@ QtProjectParameters GuiAppWizardDialog::projectParameters() const
 {
     QtProjectParameters rc;
     rc.type =  QtProjectParameters::GuiApp;
+    rc.flags |= QtProjectParameters::WidgetsRequiredFlag;
     rc.fileName = projectName();
     rc.path = path();
-    rc.selectedModules = selectedModules();
-    rc.deselectedModules = deselectedModules();
+    rc.selectedModules = selectedModulesList();
+    rc.deselectedModules = deselectedModulesList();
     return rc;
 }
 
diff --git a/src/plugins/qt4projectmanager/wizards/librarywizarddialog.cpp b/src/plugins/qt4projectmanager/wizards/librarywizarddialog.cpp
index 96e892aa2541488e76e3fa895faa73886da12cd8..49ec4e9673fef710c1bd6bd43868ac29390573ff 100644
--- a/src/plugins/qt4projectmanager/wizards/librarywizarddialog.cpp
+++ b/src/plugins/qt4projectmanager/wizards/librarywizarddialog.cpp
@@ -85,9 +85,9 @@ static const PluginBaseClasses *findPluginBaseClass(const QString &name)
 
 // return dependencies of a plugin as a line ready for the 'QT=' line in a pro
 // file
-static QString pluginDependencies(const PluginBaseClasses *plb)
+static QStringList pluginDependencies(const PluginBaseClasses *plb)
 {
-    QString dependencies;
+    QStringList dependencies;
     const QChar blank = QLatin1Char(' ');
     // Find the module names and convert to ids
     QStringList pluginModules= plb->dependentModules ?
@@ -95,9 +95,7 @@ static QString pluginDependencies(const PluginBaseClasses *plb)
                                QStringList();
     pluginModules.push_back(QLatin1String(plb->module));
     foreach (const QString &module, pluginModules) {
-        if (!dependencies.isEmpty())
-            dependencies += blank;
-        dependencies += ModulesPage::idOfModule(module);
+        dependencies.append(ModulesPage::idOfModule(module));
     }
     return dependencies;
 }
@@ -303,8 +301,8 @@ QtProjectParameters LibraryWizardDialog::parameters() const
         }
     } else {
         // Modules from modules page
-        rc.selectedModules = selectedModules();
-        rc.deselectedModules = deselectedModules();
+        rc.selectedModules = selectedModulesList();
+        rc.deselectedModules = deselectedModulesList();
     }
     return rc;
 }
diff --git a/src/plugins/qt4projectmanager/wizards/modulespage.cpp b/src/plugins/qt4projectmanager/wizards/modulespage.cpp
index 94dc88193aded65042a130d27fd20c77ee3cbbc3..ffb8a7d3c551f8dfa3bbc37ce5165fdd21d08eeb 100644
--- a/src/plugins/qt4projectmanager/wizards/modulespage.cpp
+++ b/src/plugins/qt4projectmanager/wizards/modulespage.cpp
@@ -91,12 +91,12 @@ QString ModulesPage::idOfModule(const QString &module)
     return QString();
 }
 
-QString ModulesPage::selectedModules() const
+QStringList ModulesPage::selectedModulesList() const
 {
     return modules(true);
 }
 
-QString ModulesPage::deselectedModules() const
+QStringList ModulesPage::deselectedModulesList() const
 {
     return modules(false);
 }
@@ -115,7 +115,7 @@ void ModulesPage::setModuleEnabled(const QString &module, bool enabled) const
     checkBox->setEnabled(enabled);
 }
 
-QString ModulesPage::modules(bool selected) const
+QStringList ModulesPage::modules(bool selected) const
 {
     QStringList modules;
     foreach (const QString &module, QtModulesInfo::modules()) {
@@ -123,5 +123,5 @@ QString ModulesPage::modules(bool selected) const
             && selected == field(module).toBool())
             modules << module;
     }
-    return modules.join(QString(QLatin1Char(' ')));
+    return modules;
 }
diff --git a/src/plugins/qt4projectmanager/wizards/modulespage.h b/src/plugins/qt4projectmanager/wizards/modulespage.h
index e6e922baee0cd4e1093c8367874baa4626a57ac0..3654ae638221aa51a672ea40b34e258427ccdb1a 100644
--- a/src/plugins/qt4projectmanager/wizards/modulespage.h
+++ b/src/plugins/qt4projectmanager/wizards/modulespage.h
@@ -34,6 +34,7 @@
 #define MODULESPAGE_H
 
 #include <QtCore/QMap>
+#include <QtCore/QStringList>
 #include <QtGui/QWizard>
 
 QT_BEGIN_NAMESPACE
@@ -49,8 +50,10 @@ class ModulesPage : public QWizardPage
 
 public:
     explicit ModulesPage(QWidget* parent = 0);
-    QString selectedModules() const;
-    QString deselectedModules() const;
+
+    QStringList selectedModulesList() const;
+    QStringList deselectedModulesList() const;
+
     void setModuleSelected(const QString &module, bool selected = true) const;
     void setModuleEnabled(const QString &module, bool enabled = true) const;
 
@@ -59,7 +62,7 @@ public:
 
 private:
     QMap<QString, QCheckBox*> m_moduleCheckBoxMap;
-    QString modules(bool selected = true) const;
+    QStringList modules(bool selected = true) const;
 };
 
 } // namespace Internal
diff --git a/src/plugins/qt4projectmanager/wizards/qtprojectparameters.cpp b/src/plugins/qt4projectmanager/wizards/qtprojectparameters.cpp
index db6e8e24d83c813ec1b218866bac799db3cb4890..d96b870840755cc71171a0fb685a357ed382d520 100644
--- a/src/plugins/qt4projectmanager/wizards/qtprojectparameters.cpp
+++ b/src/plugins/qt4projectmanager/wizards/qtprojectparameters.cpp
@@ -44,7 +44,7 @@ namespace Internal {
 
 // ----------- QtProjectParameters
 QtProjectParameters::QtProjectParameters()
-  : type(ConsoleApp)
+  : type(ConsoleApp), flags(WidgetsRequiredFlag), qtVersionSupport(SupportQt4And5)
 {
 }
 
@@ -57,12 +57,37 @@ QString QtProjectParameters::projectPath() const
     return rc;
 }
 
+// Write out a QT module line.
+static inline void writeQtModulesList(QTextStream &str,
+                                      const QStringList &modules,
+                                      char op ='+')
+{
+    if (const int size = modules.size()) {
+        str << "QT       " << op << "= ";
+        for (int i =0; i < size; ++i) {
+            if (i)
+                str << ' ';
+            str << modules.at(i);
+        }
+        str << "\n\n";
+    }
+}
+
 void QtProjectParameters::writeProFile(QTextStream &str) const
 {
-    if (!selectedModules.isEmpty())
-        str << "QT       += " << selectedModules << "\n\n";
-    if (!deselectedModules.isEmpty())
-        str << "QT       -= " << deselectedModules << "\n\n";
+    QStringList allSelectedModules = selectedModules;
+    // Handling of widgets module.
+    const bool addWidgetsModule =
+        (flags & WidgetsRequiredFlag) && qtVersionSupport != SupportQt4Only
+        && !allSelectedModules.contains(QLatin1String("widgets"));
+
+    if (addWidgetsModule && qtVersionSupport == SupportQt5Only)
+        allSelectedModules.append(QLatin1String("widgets"));
+    writeQtModulesList(str, allSelectedModules, '+');
+    writeQtModulesList(str, deselectedModules, '-');
+    if (addWidgetsModule && qtVersionSupport == SupportQt4And5)
+        str << "greaterThan(QT_MAJOR_VERSION, 4): QT += widgets\n\n";
+
     const QString &effectiveTarget = target.isEmpty() ? fileName : target;
     if (!effectiveTarget.isEmpty())
         str << "TARGET = " <<  effectiveTarget << '\n';
diff --git a/src/plugins/qt4projectmanager/wizards/qtprojectparameters.h b/src/plugins/qt4projectmanager/wizards/qtprojectparameters.h
index 8fa528620dd41407b48511cf1813528bbf6cc8f1..b1ff3295b98539c52aba214c8b7abae4146207cf 100644
--- a/src/plugins/qt4projectmanager/wizards/qtprojectparameters.h
+++ b/src/plugins/qt4projectmanager/wizards/qtprojectparameters.h
@@ -51,6 +51,8 @@ QString createMacro(const QString &name, const QString &suffix);
 
 struct QtProjectParameters {
     enum Type { ConsoleApp, GuiApp, StaticLibrary, SharedLibrary, Qt4Plugin, EmptyProject };
+    enum QtVersionSupport { SupportQt4And5, SupportQt4Only, SupportQt5Only };
+    enum Flags { WidgetsRequiredFlag = 0x1 };
 
     QtProjectParameters();
     // Return project path as "path/name"
@@ -64,11 +66,13 @@ struct QtProjectParameters {
     static QString libraryMacro(const QString &projectName);
 
     Type type;
+    unsigned flags;
+    QtVersionSupport qtVersionSupport;
     QString fileName;
     QString target;
     QString path;
-    QString selectedModules;
-    QString deselectedModules;
+    QStringList selectedModules;
+    QStringList deselectedModules;
     QString targetDirectory;
 };
 
diff --git a/src/plugins/qt4projectmanager/wizards/qtwizard.cpp b/src/plugins/qt4projectmanager/wizards/qtwizard.cpp
index 8229f440cca7deb9a2888623c2e3f8118037383e..26e8580ea46420e1d2b438b221e6ad4ac69c3772 100644
--- a/src/plugins/qt4projectmanager/wizards/qtwizard.cpp
+++ b/src/plugins/qt4projectmanager/wizards/qtwizard.cpp
@@ -260,35 +260,37 @@ int BaseQt4ProjectWizardDialog::addTargetSetupPage(QSet<QString> targets, bool m
     return id;
 }
 
-QString BaseQt4ProjectWizardDialog::selectedModules() const
+QStringList BaseQt4ProjectWizardDialog::selectedModulesList() const
 {
-    return m_modulesPage ? m_modulesPage->selectedModules() : m_selectedModules;
+    return m_modulesPage ? m_modulesPage->selectedModulesList() : m_selectedModules;
 }
 
 void BaseQt4ProjectWizardDialog::setSelectedModules(const QString &modules, bool lock)
 {
+    const QStringList modulesList = modules.split(QLatin1Char(' '));
     if (m_modulesPage) {
-        foreach(const QString &module, modules.split(QLatin1Char(' '))) {
+        foreach (const QString &module, modulesList) {
             m_modulesPage->setModuleSelected(module, true);
             m_modulesPage->setModuleEnabled(module, !lock);
         }
     } else {
-        m_selectedModules = modules;
+        m_selectedModules = modulesList;
     }
 }
 
-QString BaseQt4ProjectWizardDialog::deselectedModules() const
+QStringList BaseQt4ProjectWizardDialog::deselectedModulesList() const
 {
-    return m_modulesPage ? m_modulesPage->deselectedModules() : m_deselectedModules;
+    return m_modulesPage ? m_modulesPage->deselectedModulesList() : m_deselectedModules;
 }
 
 void BaseQt4ProjectWizardDialog::setDeselectedModules(const QString &modules)
 {
+    const QStringList modulesList = modules.split(QLatin1Char(' '));
     if (m_modulesPage) {
-        foreach(const QString &module, modules.split(QLatin1Char(' ')))
+        foreach (const QString &module, modulesList)
             m_modulesPage->setModuleSelected(module, false);
     } else {
-        m_deselectedModules = modules;
+        m_deselectedModules = modulesList;
     }
 }
 
diff --git a/src/plugins/qt4projectmanager/wizards/qtwizard.h b/src/plugins/qt4projectmanager/wizards/qtwizard.h
index edc7f9b7b7a0ff0e4d02b7f03b1781a0502960e9..c37249c58e150127678fe244f320ee05ec7bca64 100644
--- a/src/plugins/qt4projectmanager/wizards/qtwizard.h
+++ b/src/plugins/qt4projectmanager/wizards/qtwizard.h
@@ -134,10 +134,10 @@ public:
 
     static QSet<QString> desktopTarget();
 
-    QString selectedModules() const;
+    QStringList selectedModulesList() const;
     void setSelectedModules(const QString &, bool lock = false);
 
-    QString deselectedModules() const;
+    QStringList deselectedModulesList() const;
     void setDeselectedModules(const QString &);
 
     bool writeUserFile(const QString &proFileName) const;
@@ -152,8 +152,8 @@ private:
 
     ModulesPage *m_modulesPage;
     TargetSetupPage *m_targetSetupPage;
-    QString m_selectedModules;
-    QString m_deselectedModules;
+    QStringList m_selectedModules;
+    QStringList m_deselectedModules;
     QSet<QString> m_targets;
 };
 
diff --git a/src/plugins/qt4projectmanager/wizards/testwizarddialog.cpp b/src/plugins/qt4projectmanager/wizards/testwizarddialog.cpp
index b3e7d76cdc9c7cbdc577411667adf230f2b8f3f5..f758f164988a1bbd8f3937f9d938b9c6b96367d3 100644
--- a/src/plugins/qt4projectmanager/wizards/testwizarddialog.cpp
+++ b/src/plugins/qt4projectmanager/wizards/testwizarddialog.cpp
@@ -91,8 +91,8 @@ QtProjectParameters TestWizardDialog::projectParameters() const
     rc.path = path();
     // Name binary "tst_xx" after the main source
     rc.target = QFileInfo(m_testPage->sourcefileName()).baseName();
-    rc.selectedModules = selectedModules();
-    rc.deselectedModules = deselectedModules();
+    rc.selectedModules = selectedModulesList();
+    rc.deselectedModules = deselectedModulesList();
     return rc;
 }