diff --git a/examples/gallery/main.qml b/examples/gallery/main.qml
index cf24bec1e6c469ca0a9de05ee8f6336a852398d8..63047003c7b0d01a35bf9493566a5a0904fdd2ad 100644
--- a/examples/gallery/main.qml
+++ b/examples/gallery/main.qml
@@ -226,6 +226,15 @@ ApplicationWindow {
                 shortcut: "Ctrl+E,Shift+Ctrl+X"
                 enabled: false
             }
+            MenuItem {
+                text: "Not Even There"
+                shortcut: "Ctrl+E,Shift+Ctrl+Y"
+                visible: false
+            }
+            Menu {
+                text: "Me Neither"
+                visible: false
+            }
         }
     }
 
diff --git a/src/controls/Menu.qml b/src/controls/Menu.qml
index ef406caa11de55830d3b69aea6986954d1a23f2a..b4ba2e9647d0fcb2d76aa76c3360eed165416aaf 100644
--- a/src/controls/Menu.qml
+++ b/src/controls/Menu.qml
@@ -247,7 +247,9 @@ MenuPrivate {
                         property int menuItemIndex: index
 
                         sourceComponent: menuFrameLoader.menuItemStyle
-                        enabled: !isSeparator && !!menuItem && menuItem.enabled
+                        enabled: visible && !isSeparator && !!menuItem && menuItem.enabled
+                        visible: menuItem.visible
+                        active: visible
 
                         function showSubMenu(immediately) {
                             if (immediately) {
diff --git a/src/controls/qtmenuitem.cpp b/src/controls/qtmenuitem.cpp
index 124ba4c81d6c566a9f9f9f10480d0508c401ec9d..bf2248d1684849ca540815e459686f635d91e29c 100644
--- a/src/controls/qtmenuitem.cpp
+++ b/src/controls/qtmenuitem.cpp
@@ -66,6 +66,10 @@ void QtMenuBase::setVisible(bool v)
 {
     if (v != m_visible) {
         m_visible = v;
+
+        if (m_platformItem)
+            m_platformItem->setVisible(m_visible);
+
         emit visibleChanged();
     }
 }