Details
-
Bug
-
Resolution: Done
-
P3: Somewhat important
-
5.4.2, 5.5.0
-
Win8.1, Ubuntu 14.04
-
eadd7e9cfb4e0802aa9da63badc41c39fec219bb
Description
In case you have a custom Widget in secondary hierarchy of a menu, no enter event is received. See attached screencasts.
Interesting: In Qt5.4 no enter and no leave events are received. In Qt5.5 no enter event, but to much leave events are received.
Source of demo
#include <QApplication> #include <QMainWindow> #include <QWidgetAction> #include <QMenuBar> #include <QMenu> #include <QMouseEvent> #include <QListWidget> #include <QGridLayout> class EnterLeaveWidget : public QWidget { public: EnterLeaveWidget(QWidget* parent = nullptr) : QWidget(parent), m_enterEvents(0), m_leaveEvents(0), m_layout(this), m_list(this) { m_layout.setContentsMargins(0, 0, 0, 0); m_layout.addWidget(&m_list); } void enterEvent(QEvent * event) override { m_enterEvents++; m_list.addItem("Enter " + QString::number(m_enterEvents) + " Leaves: " + QString::number(m_leaveEvents)); m_list.scrollToBottom(); } void leaveEvent(QEvent * event) override { m_leaveEvents++; m_list.addItem("Enter " + QString::number(m_enterEvents) + " Leaves: " + QString::number(m_leaveEvents)); m_list.scrollToBottom(); } protected: int m_enterEvents; int m_leaveEvents; QGridLayout m_layout; QListWidget m_list; }; void addEnterLeaveWidgetAsAction(QMenu * menu) { QWidgetAction *widgetAction = new QWidgetAction(menu); auto w = new EnterLeaveWidget(); w->setFixedSize(150, 150); widgetAction->setDefaultWidget(w); menu->addAction(widgetAction); } int main(int argc, char * argv[]) { QApplication qapp(argc, argv); QMainWindow mainWindow; mainWindow.setFixedSize(300, 350); auto mainMenu = mainWindow.menuBar()->addMenu("MainMenu"); addEnterLeaveWidgetAsAction(mainMenu); auto subMenu = mainMenu->addMenu("SubMenu"); addEnterLeaveWidgetAsAction(subMenu); mainWindow.show(); qapp.exec(); }