diff --git a/src/libs/utils/codegeneration.cpp b/src/libs/utils/codegeneration.cpp
index fd5a4f3864b28b69ba0bac167db0ee00834a0749..96786b06182a67404bef22988832669eec7871c6 100644
--- a/src/libs/utils/codegeneration.cpp
+++ b/src/libs/utils/codegeneration.cpp
@@ -81,6 +81,11 @@ void writeIncludeFileDirective(const QString &file, bool globalInclude,
     str << QLatin1String("#include ") << opening << file <<  closing << QLatin1Char('\n');
 }
 
+QTCREATOR_UTILS_EXPORT void writeBeginQtVersionCheck(QTextStream &str)
+{
+    str << QLatin1String("#if QT_VERSION >= 0x050000\n");
+}
+
 QTCREATOR_UTILS_EXPORT
 QString writeOpeningNameSpaces(const QStringList &l, const QString &indent,
                                QTextStream &str)
diff --git a/src/libs/utils/codegeneration.h b/src/libs/utils/codegeneration.h
index a2fe6c79f218b6771529a82dec8aa99f64457b3d..ed4587a5e6a612d5a7f2a096fd9f118d61d1058f 100644
--- a/src/libs/utils/codegeneration.h
+++ b/src/libs/utils/codegeneration.h
@@ -55,6 +55,8 @@ void writeIncludeFileDirective(const QString &file,
                                bool globalInclude,
                                QTextStream &str);
 
+QTCREATOR_UTILS_EXPORT void writeBeginQtVersionCheck(QTextStream &str);
+
 // Write opening namespaces and return an indentation string to be used
 // in the following code if there are any.
 QTCREATOR_UTILS_EXPORT
diff --git a/src/plugins/designer/cpp/cppsettingspage.cpp b/src/plugins/designer/cpp/cppsettingspage.cpp
index b55df33b8084ad0ccbbdff567f1a65ce1a454bdb..dd869fd2939a789dba76d7c735e4dfd4c2efa49f 100644
--- a/src/plugins/designer/cpp/cppsettingspage.cpp
+++ b/src/plugins/designer/cpp/cppsettingspage.cpp
@@ -46,6 +46,8 @@ CppSettingsPageWidget::CppSettingsPageWidget(QWidget *parent) :
         QWidget(parent)
 {
     m_ui.setupUi(this);
+    connect(m_ui.includeQtModuleCheckBox, SIGNAL(toggled(bool)),
+            m_ui.addQtVersionCheckBox, SLOT(setEnabled(bool)));
 }
 
 FormClassWizardGenerationParameters CppSettingsPageWidget::parameters() const
@@ -54,6 +56,7 @@ FormClassWizardGenerationParameters CppSettingsPageWidget::parameters() const
     rc.embedding = static_cast<UiClassEmbedding>(uiEmbedding());
     rc.retranslationSupport =m_ui.retranslateCheckBox->isChecked();
     rc.includeQtModule = m_ui.includeQtModuleCheckBox->isChecked();
+    rc.addQtVersionCheck = m_ui.addQtVersionCheckBox->isChecked();
     return rc;
 }
 
@@ -61,6 +64,7 @@ void CppSettingsPageWidget::setParameters(const FormClassWizardGenerationParamet
 {
     m_ui.retranslateCheckBox->setChecked(p.retranslationSupport);
     m_ui.includeQtModuleCheckBox->setChecked(p.includeQtModule);
+    m_ui.addQtVersionCheckBox->setChecked(p.addQtVersionCheck);
     setUiEmbedding(p.embedding);
 }
 
diff --git a/src/plugins/designer/cpp/cppsettingspagewidget.ui b/src/plugins/designer/cpp/cppsettingspagewidget.ui
index d34a4f86f440fde46eeabfee868da3df55f7865e..f9a88364ca2a3d38397d171c08cee5dad1166ba0 100644
--- a/src/plugins/designer/cpp/cppsettingspagewidget.ui
+++ b/src/plugins/designer/cpp/cppsettingspagewidget.ui
@@ -2,6 +2,14 @@
 <ui version="4.0">
  <class>Designer::Internal::CppSettingsPageWidget</class>
  <widget class="QWidget" name="Designer::Internal::CppSettingsPageWidget">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>340</width>
+    <height>232</height>
+   </rect>
+  </property>
   <property name="windowTitle">
    <string>Form</string>
   </property>
@@ -62,6 +70,16 @@
         </property>
        </widget>
       </item>
+      <item>
+       <widget class="QCheckBox" name="addQtVersionCheckBox">
+        <property name="enabled">
+         <bool>false</bool>
+        </property>
+        <property name="text">
+         <string>Add Qt version #ifdef for module names</string>
+        </property>
+       </widget>
+      </item>
      </layout>
     </widget>
    </item>
diff --git a/src/plugins/designer/qtdesignerformclasscodegenerator.cpp b/src/plugins/designer/qtdesignerformclasscodegenerator.cpp
index ba8752b25b877ce9be2c13ac3fa2ed198cadda93..0098df732946181fcf91608784bb79739aa047d2 100644
--- a/src/plugins/designer/qtdesignerformclasscodegenerator.cpp
+++ b/src/plugins/designer/qtdesignerformclasscodegenerator.cpp
@@ -51,9 +51,10 @@ static const char formClassWizardPageGroupC[] = "FormClassWizardPage";
 static const char translationKeyC[] = "RetranslationSupport";
 static const char embeddingModeKeyC[] = "Embedding";
 
-// TODO: These 2 are general coding convention settings and
+// TODO: These 3 are general coding convention settings and
 // should go to CppTools...
 static const char includeQtModuleKeyC[] = "IncludeQtModule";
+static const char addQtVersionCheckKeyC[] = "AddQtVersionCheck";
 static const char indentNamespaceKeyC[] = "IndentNamespace";
 
 static const bool retranslationSupportDefault = false;
@@ -65,6 +66,7 @@ FormClassWizardGenerationParameters::FormClassWizardGenerationParameters() :
     embedding(PointerAggregatedUiClass),
     retranslationSupport(retranslationSupportDefault),
     includeQtModule(false),
+    addQtVersionCheck(false),
     indentNamespace(false)
 {
 }
@@ -76,6 +78,7 @@ void FormClassWizardGenerationParameters::fromSettings(const QSettings *settings
     retranslationSupport = settings->value(group + QLatin1String(translationKeyC), retranslationSupportDefault).toBool();
     embedding =  static_cast<UiClassEmbedding>(settings->value(group + QLatin1String(embeddingModeKeyC), int(PointerAggregatedUiClass)).toInt());
     includeQtModule = settings->value(group + QLatin1String(includeQtModuleKeyC), false).toBool();
+    addQtVersionCheck = settings->value(group + QLatin1String(addQtVersionCheckKeyC), false).toBool();
     indentNamespace = settings->value(group + QLatin1String(indentNamespaceKeyC), false).toBool();
 }
 
@@ -85,14 +88,18 @@ void FormClassWizardGenerationParameters::toSettings(QSettings *settings) const
     settings->setValue(QLatin1String(translationKeyC), retranslationSupport);
     settings->setValue(QLatin1String(embeddingModeKeyC), embedding);
     settings->setValue(QLatin1String(includeQtModuleKeyC), includeQtModule);
+    settings->setValue(QLatin1String(addQtVersionCheckKeyC), addQtVersionCheck);
     settings->setValue(QLatin1String(indentNamespaceKeyC), indentNamespace);
     settings->endGroup();
 }
 
 bool FormClassWizardGenerationParameters::equals(const FormClassWizardGenerationParameters &rhs) const
 {
-    return embedding == rhs.embedding && retranslationSupport == rhs.retranslationSupport
-         && includeQtModule == rhs.includeQtModule && indentNamespace == rhs.indentNamespace;
+    return embedding == rhs.embedding
+            && retranslationSupport == rhs.retranslationSupport
+            && includeQtModule == rhs.includeQtModule
+            && addQtVersionCheck == rhs.addQtVersionCheck
+            && indentNamespace == rhs.indentNamespace;
 }
 
 // Generation code
@@ -166,10 +173,19 @@ bool QtDesignerFormClassCodeGenerator::generateCpp(const FormClassWizardParamete
         // Todo: Can we obtain the header from the code model for custom widgets?
         // Alternatively, from Designer.
         if (formBaseClass.startsWith(QLatin1Char('Q'))) {
-            QString baseInclude = formBaseClass;
-            if (generationParameters.includeQtModule)
-                baseInclude.insert(0, QLatin1String("QtGui/"));
-            Utils::writeIncludeFileDirective(baseInclude, true, headerStr);
+            if (generationParameters.includeQtModule) {
+                if (generationParameters.addQtVersionCheck) {
+                    Utils::writeBeginQtVersionCheck(headerStr);
+                    Utils::writeIncludeFileDirective(QLatin1String("QtWidgets/") + formBaseClass, true, headerStr);
+                    headerStr << "#else\n";
+                    Utils::writeIncludeFileDirective(QLatin1String("QtGui/") + formBaseClass, true, headerStr);
+                    headerStr << "#endif\n";
+                } else {
+                    Utils::writeIncludeFileDirective(QLatin1String("QtGui/") + formBaseClass, true, headerStr);
+                }
+            } else {
+                Utils::writeIncludeFileDirective(formBaseClass, true, headerStr);
+            }
         }
     }
 
diff --git a/src/plugins/designer/qtdesignerformclasscodegenerator.h b/src/plugins/designer/qtdesignerformclasscodegenerator.h
index ffab76138b1176bf2cfe9c4fa85f2855e56c4714..3f7c47c92f7de3152a0661aed8afc7f2fe1a1658 100644
--- a/src/plugins/designer/qtdesignerformclasscodegenerator.h
+++ b/src/plugins/designer/qtdesignerformclasscodegenerator.h
@@ -65,6 +65,7 @@ struct FormClassWizardGenerationParameters
     UiClassEmbedding embedding;
     bool retranslationSupport; // Add handling for language change events
     bool includeQtModule; // Include "<QtGui/[Class]>" or just "<[Class]>"
+    bool addQtVersionCheck; // Include #ifdef when using "#include <QtGui/..."
     bool indentNamespace;
 };