diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp
index dd568cd..c450bed 100644
--- a/src/gui/kernel/qwidget.cpp
+++ b/src/gui/kernel/qwidget.cpp
@@ -3187,6 +3187,24 @@ void QWidget::setEnabled(bool enable)
     d->setEnabled_helper(enable);
 }
 
+/*!
+    \property QWidget::enabledAllowed
+    \brief whether the widget is enabled when its parent is enabled
+
+    This property is true when widget's attribute Qt::WA_ForceDisabled
+    is not set, and false otherwise.
+
+    By default, this property is true.
+
+    \sa QWidget::enabled
+*/
+void QWidget::setEnabledAllowed(bool enable)
+{
+    Q_D(QWidget);
+    setAttribute(Qt::WA_ForceDisabled, !enable);
+    d->setEnabled_helper(enable);
+}
+
 void QWidgetPrivate::setEnabled_helper(bool enable)
 {
     Q_Q(QWidget);
diff --git a/src/gui/kernel/qwidget.h b/src/gui/kernel/qwidget.h
index 941bd68..8d7b5dd 100644
--- a/src/gui/kernel/qwidget.h
+++ b/src/gui/kernel/qwidget.h
@@ -145,6 +145,7 @@ class Q_GUI_EXPORT QWidget : public QObject, public QPaintDevice
     Q_PROPERTY(bool modal READ isModal)
     Q_PROPERTY(Qt::WindowModality windowModality READ windowModality WRITE setWindowModality)
     Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled)
+    Q_PROPERTY(bool enabledAllowed READ isEnabledAllowed WRITE setEnabledAllowed)
     Q_PROPERTY(QRect geometry READ geometry WRITE setGeometry)
     Q_PROPERTY(QRect frameGeometry READ frameGeometry)
     Q_PROPERTY(QRect normalGeometry READ normalGeometry)
@@ -247,11 +248,13 @@ public:
     void setWindowModality(Qt::WindowModality windowModality);
 
     bool isEnabled() const;
+    bool isEnabledAllowed() const;
     bool isEnabledTo(QWidget*) const;
     bool isEnabledToTLW() const;
 
 public Q_SLOTS:
     void setEnabled(bool);
+    void setEnabledAllowed(bool);
     void setDisabled(bool);
     void setWindowModified(bool);
 
@@ -934,6 +937,9 @@ inline bool QWidget::isWindow() const
 inline bool QWidget::isEnabled() const
 { return !testAttribute(Qt::WA_Disabled); }
 
+inline bool QWidget::isEnabledAllowed() const
+{ return !testAttribute(Qt::WA_ForceDisabled); }
+
 inline bool QWidget::isModal() const
 { return data->window_modality != Qt::NonModal; }
 
diff --git a/tools/designer/src/components/formeditor/qdesigner_resource.cpp b/tools/designer/src/components/formeditor/qdesigner_resource.cpp
index 1d78695..12b1d5e 100644
--- a/tools/designer/src/components/formeditor/qdesigner_resource.cpp
+++ b/tools/designer/src/components/formeditor/qdesigner_resource.cpp
@@ -1091,7 +1091,14 @@ void QDesignerResource::applyProperties(QObject *o, const QList<DomProperty*> &p
     for (DomPropertyList::const_iterator it = properties.constBegin(); it != cend; ++it) {
         const DomProperty *p = *it;
         const QString propertyName = p->attributeName();
-        const int index = sheet->indexOf(propertyName);
+        int tempIdx = -1;
+        if ( propertyName == QLatin1String("enabled") ) {
+            // support for old .ui files which tried to set property "enabled" instead of "enabledAllowed":
+            tempIdx = sheet->indexOf("enabledAllowed");
+        } else {
+            tempIdx = sheet->indexOf(propertyName);
+        }
+        const int index = tempIdx;
         QVariant v;
         if (!readDomEnumerationValue(p, sheet, index, v))
             v = toVariant(o->metaObject(), *it);
diff --git a/tools/designer/src/components/propertyeditor/propertyeditor.cpp b/tools/designer/src/components/propertyeditor/propertyeditor.cpp
index a8ca8ad..3b2e010 100644
--- a/tools/designer/src/components/propertyeditor/propertyeditor.cpp
+++ b/tools/designer/src/components/propertyeditor/propertyeditor.cpp
@@ -344,6 +344,7 @@ PropertyEditor::PropertyEditor(QDesignerFormEditorInterface *core, QWidget *pare
     m_treeFactory->setSpacing(0);
     m_groupFactory = new DesignerEditorFactory(m_core, this);
     QtVariantPropertyManager *variantManager = m_propertyManager;
+    variantManager->addNotEditablePropertyName("enabled");
     m_buttonBrowser->setFactoryForManager(variantManager, m_groupFactory);
     m_treeBrowser->setFactoryForManager(variantManager, m_treeFactory);
 
diff --git a/tools/shared/qtpropertybrowser/qtvariantproperty.cpp b/tools/shared/qtpropertybrowser/qtvariantproperty.cpp
index b16fac3..7629527 100644
--- a/tools/shared/qtpropertybrowser/qtvariantproperty.cpp
+++ b/tools/shared/qtpropertybrowser/qtvariantproperty.cpp
@@ -337,6 +337,10 @@ public:
             QtProperty *internal);
     void removeSubProperty(QtVariantProperty *property);
 
+    void addNotEditablePropertyName(const QString &propertyName);
+    bool isNotEditablePropertyName(const QString &propertyName);
+    void resetNotEditablePropertyNames();
+
     QMap<int, QtAbstractPropertyManager *> m_typeToPropertyManager;
     QMap<int, QMap<QString, int> > m_typeToAttributeToAttributeType;
 
@@ -356,6 +360,8 @@ public:
     const QString m_maximumAttribute;
     const QString m_minimumAttribute;
     const QString m_regExpAttribute;
+    
+    QStringList m_notEditablePropertyNames;
 };
 
 QtVariantPropertyManagerPrivate::QtVariantPropertyManagerPrivate() :
@@ -664,6 +670,19 @@ void QtVariantPropertyManagerPrivate::slotFlagNamesChanged(QtProperty *property,
         emit q_ptr->attributeChanged(varProp, m_flagNamesAttribute, QVariant(flagNames));
 }
 
+bool QtVariantPropertyManagerPrivate::isNotEditablePropertyName(const QString & propertyName) {
+    return m_notEditablePropertyNames.contains(propertyName);
+}
+
+void QtVariantPropertyManagerPrivate::addNotEditablePropertyName(const QString & propertyName){
+    if ( !m_notEditablePropertyNames.contains(propertyName) )
+        m_notEditablePropertyNames << propertyName;
+}
+
+void QtVariantPropertyManagerPrivate::resetNotEditablePropertyNames(){
+    m_notEditablePropertyNames.clear();
+}
+
 /*!
     \class QtVariantPropertyManager
     \internal
@@ -1835,6 +1854,21 @@ QtProperty *QtVariantPropertyManager::createProperty()
     return property;
 }
 
+void QtVariantPropertyManager::addNotEditablePropertyName(const QString &propertyName)
+{
+    d_ptr->addNotEditablePropertyName(propertyName);
+}
+
+bool QtVariantPropertyManager::isNotEditablePropertyName(const QString &propertyName)
+{
+    return d_ptr->isNotEditablePropertyName(propertyName);
+}
+
+void QtVariantPropertyManager::resetNotEditablePropertyNames()
+{
+    d_ptr->resetNotEditablePropertyNames();
+}
+
 /////////////////////////////
 
 class QtVariantEditorFactoryPrivate
@@ -2131,6 +2165,8 @@ QWidget *QtVariantEditorFactory::createEditor(QtVariantPropertyManager *manager,
     QtAbstractEditorFactoryBase *factory = d_ptr->m_typeToFactory.value(propType, 0);
     if (!factory)
         return 0;
+    if ( manager->isNotEditablePropertyName(property->propertyName()) )
+        return 0;
     return factory->createEditor(wrappedProperty(property), parent);
 }
 
diff --git a/tools/shared/qtpropertybrowser/qtvariantproperty.h b/tools/shared/qtpropertybrowser/qtvariantproperty.h
index 624d5e9..6570d41 100644
--- a/tools/shared/qtpropertybrowser/qtvariantproperty.h
+++ b/tools/shared/qtpropertybrowser/qtvariantproperty.h
@@ -79,6 +79,10 @@ public:
 
     virtual QtVariantProperty *addProperty(int propertyType, const QString &name = QString());
 
+    void addNotEditablePropertyName(const QString &propertyName);
+    bool isNotEditablePropertyName(const QString &propertyName);
+    void resetNotEditablePropertyNames();
+
     int propertyType(const QtProperty *property) const;
     int valueType(const QtProperty *property) const;
     QtVariantProperty *variantProperty(const QtProperty *property) const;
