diff --git a/src/widgets/widgets/qmenu.cpp b/src/widgets/widgets/qmenu.cpp index 40f427e5371..52635256251 100644 --- a/src/widgets/widgets/qmenu.cpp +++ b/src/widgets/widgets/qmenu.cpp @@ -2450,7 +2450,8 @@ void QMenuPrivate::popup(const QPoint &p, QAction *atAction, PositionFunction po } // do nothing if we don't have a valid size, e.g. when all actions are invisible - if (!size.isValid()) { + const auto rectIsNull = [](const QRect &rect) { return rect.isNull(); }; + if (std::all_of(actionRects.cbegin(), actionRects.cend(), rectIsNull)) { eventLoop = nullptr; syncAction = nullptr; return; diff --git a/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp b/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp index f3e3eb44b7b..490947fd825 100644 --- a/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp +++ b/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp @@ -2175,11 +2175,8 @@ void tst_QMenu::invisibleActions() action->setVisible(false); contextMenu.popup(globalPos); - QCOMPARE(contextMenu.isVisible(), contextMenu.sizeHint().isValid()); - - // if it wasn't shown previously, then exec() shouldn't do anything either - if (!contextMenu.isVisible()) - QVERIFY(!contextMenu.exec()); + QVERIFY(!contextMenu.isVisible()); + QVERIFY(!contextMenu.exec()); } #if QT_CONFIG(shortcut) && !defined(Q_OS_DARWIN)