Solved Qmenu aboutToShow do not freeze the program while it is open
-
@SGaist the color is not important. The fact that freez the bacground (until i don't choose a menu item) and not activate another hover effect when a qmenu is open is the question.
Okay sorry for my bad english. So i illustrate with some pictures (the red point is my cursor)
1: i move with cursor above my button (its okay)
2: i click on it and drop down the menu and i move the cursor hover the menu items (its okay)
3: i dont click, just move hover the "Pre set" button... and its not okay, couse the hover effect is not activated, but i want to activate hover effect (so the button's background not turn into yellow)
4: and when i click on it (the "pre set" button), not turn into yellow, but i want to turn it to yellow. the menu items works well here too.
-
Hi
You can try using
https://doc.qt.io/qt-5/qmenu.html#popup
instead of
https://doc.qt.io/qt-5/qmenu.html#exec
to show the dropdown menu.The reason for the hover event is not coming for other widgets when the menu is open could be due to the use
of exec() or that its considered a toplevel window and hence also steals the events. -
@mrjj Hello!
I use aboutToShow not exec. because i wanted to copy the menubutton size (for all menuitem).
But if i tried with the popup the issue is the same :( And the menu items size not correct. -
@Kaguro
Hi
Ok so even if you use popup to show the dropdown menu, the
other widgets still dont get the hover event ?aboutToShow is just a signal to say menu is about to be shown.
Its not really related to your current issue.I think the main issue is that QMenu takes all events when open.
Not 100% sure why yet. -
@mrjj Yes! If i used popup the other widgets still dont get the hover event. Everything else is "freeze".
Yeah you are right the abouttoshow is not related in this problem. -
So if I understand correctly you would like to have your set of buttons behave more or less like a menu bar ?
-
@SGaist Yes! You are right! Like the menubar
-
-
Hi
Im not sure its possible to make it work. Its about toplevel widgets and we cannot change that for QMenu
as then it stop working.The best work around in my opinion is to use an event filter to make it close if the user moves the mouse outside the menu
.. somewhere... menuSettings = new QMenu(this); // menuSettings must be a member menuSettings->addAction("Config CAMS"); menuSettings->addAction("Alarms"); menuSettings->addAction("Storage"); menuSettings->addAction("Plano"); menuSettings->addAction("Advance"); menuSettings->addAction("Report"); ui->pushButton->setMenu(menuSettings); menuSettings->installEventFilter(this); // INSTALL event filer } bool MainWindow::eventFilter(QObject *obj, QEvent *event) // the filter { if (obj == menuSettings && event->type() == QEvent::Leave) { if (menuSettings) menuSettings->close(); } return false; }
-
@mrjj Oh yeah! This is it and works! :D Many many thanks my hero!