views:

1412

answers:

2

I'm using the Qt library to show a slideshow on the second monitor when the user isn't using the second monitor. An example is the user playing a game in the first monitor and showing the slideshow in the second monitor.

The problem is that when I open a new window in Qt, it automatically steals the focus from the previous application. Is there any way to prevent this from happening?

+1  A: 

Widgets don't accept focus by default but presumably you haven't created a plain widget? Which subclass was it? QMainWindow or something else?

It's possible the window subclasses default to accepting focus so try explicitly calling QWidget::setFocusPolicy with Qt::NoFocus before calling QWidget::show().

Also, make sure you're not calling QWidget::activateWindow() on the window or any of its widgets at any point.

Troubadour
- I'm creating a plain QWidget-derived class without any flags- setFocusPolicy() doesn't seem to have any effect.- Qt::WindowStaysOnBottomHint works but the window won't be visible on open (under other applictions)Interestingly the first time the window is opened, it doesn't take the focus. Only when the window is reopened it takes the focus from other Windows-applocations.
Robbie Groenewoudt
+8  A: 

It took me a while to find it but I found it: setAttribute(Qt::WA_ShowWithoutActivating);

This forces the window not to activate. Even with the Qt::WindowStaysOnTopHint flag

Robbie Groenewoudt