Force focus on popup - qt

I have a mainwindow and a button on this mainWindow that opens a popup.
Now I want to force the focus on that popup.
Right now i am doing
mainwindow.setEnabled(False)
popup.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)
when the popup is opened and
mainwindow.setEnabled(True)
when the popup is closed, but that does not affect the focus.
Is there another way, than to catch the signal that the mainwindow got the focus and force it back to the popup?

Thanks to a comment I was able to solve it myself (and it was quite easy):
popup.setWindowModality(QtCore.Qt.ApplicationModal)
link

Related

QT click on button in widget without focus

i have an app where i have 2 widgets, one widget shows a video and the other one two buttons as transparent widget lying over the video. Means the widget with the buttons has the focus. When now somebody clicks on the video normally this should emit a signal to open a website in an external browser, but while the other widget has the focus, this signal is not emitted while the click only changes the focus to the video but is not getting the click itself.
is there a way to use the click, to change the focus and catch the click event to open my website?
Georg
I guess you can try the function: setFocusProxy()
video.setFocusProxy(button);
Maybe you can get some help.

How to check if the mouse has really left the QWidget?

Consider a QWidget window, what event is triggered when the mouse has left this window?
The window has QLineEdit fields on it and they have completers (QCompleter) for input suggestions. The actual goal is to make such an (open) completer disappear when the mouse leaves the window. This is mostly because in some environments, moving the mouse over a different window may focus that other window, but keyboard events are still sent to the QLineEdit field (even though its parent window isn't focused anymore), which is confusing.
I could implement QWidget::leaveEvent(QEvent *event) (in the window), find the currently shown completer popup and hide it, that closes the popup. But ironically, leaveEvent() is also triggered when the mouse is moved over that popup - hiding it (making it impossible to click on an item in that popup). I guess that makes sense because the popup is a different QWidget, even though the popup is indirectly owned by the window.
So how do I check if the mouse has actually left the QWidget window?
Reimplement QWidget::leaveEvent(QEvent *event) in your derived class but start by checking that rect().contains(mapFromGlobal(QCursor::pos())) is true.
If not, return without doing anything.
This should filter out all the events where the mouse is still over your widget.
Hope it helps!

MFC: Is there any way to active button without On_Bn_Clicked() event?

I have a task that are hiding a dialog but I need to click the button belong to this dialog to
implement some function before go to the next dialog.
But when I hide this dialog, I can't click the button. Is there any way to implement this button without On_Bn_Clicked() event? I mean that when the dialog is called, the button is also activated.
Thank for the helps.
When you click the button a few Windows messages are sent. The important ones are WM_LBUTTONDOWN, WM_LBUTTONUP which tells the button you clicked the left mouse button down and up. Then some time later a WM_COMMAND message is sent to the parent window to handle the button click. At that point your ON_COMMAND() MFC handler is called. MFC abstracts this all away from you for the most part.
You could go and simulate this using the Win32 SendMessage API but if the message pump is blocking your button may not be clicked when you think it will. If you want a quick answer to your question then this is an approach to "get it done". It would look something like this:
SendMessage(button.GetSafeHwnd(), WM_LBUTTONDOWN, MK_LBUTTON, 0);
SendMessage(button.GetSafeHwnd(), WM_LBUTTONUP, MK_LBUTTON, 0);
I think a more sensible approach is to take the code that is in this On_Bn_Clicked() event handler and simply move it to a reusable function. This way you can call the code in On_Bn_Clicked() from anywhere in your program.
Just call On_Bn_Clicked() directly from your code. There is no harm in doing so. (I suppose you don't want to actually click the hidden button with the mouse...)

Get active modal QWidget

I need to know in my app if a modal window is opened when I click on a button.
So I'm searching for a method which permits to know if a modal window is opened in my application or no, and which returns the window (or NULL)
Is it possible?
See QApplication's static activeModalWidget

Qt - window over modal dialog

I have next problem:
I have one modal dialog over main app, but I need to show help dialog of that modal dialog in front of anything (even that modal dialog).
Is there a way to accomplish this without making my modal dialog non-modal.
Thanks
If the help dialog would be in front of the modal dialog, how could the user close the modal dialog? The user could not interact with the help dialog in any way. I wouldn't recommend making a user interface that works differently than all other similar interfaces with modal dialogs.
Maybe you could move the help text from the help dialog to the modal dialog?
Just create another modal style dialog for the help dialog from within the dialog you've already created. You couldn't select select help from anything but that anyway.

Resources