Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-47515

Missing events in secondary level of a menu

XMLWordPrintable

    • eadd7e9cfb4e0802aa9da63badc41c39fec219bb

      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();
      }
      

        1. qt5.4.gif
          140 kB
          Heiko Thiel
        2. qt5.5.gif
          193 kB
          Heiko Thiel
        3. QTBUG-47515.tar.gz
          1 kB
          Timur Pocheptsov
        4. qtbug47515.zip
          2 kB
          Friedemann Kleint
        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

            mmutz Marc Mutz
            EliteScience Heiko Thiel
            Votes:
            3 Vote for this issue
            Watchers:
            5 Start watching this issue

              Created:
              Updated:
              Resolved:

                There are no open Gerrit changes