Show window in Qt without stealing focus

后端 未结 3 1571
南旧
南旧 2020-12-13 12:37

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

相关标签:
3条回答
  • 2020-12-13 13:12

    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.

    0 讨论(0)
  • 2020-12-13 13:25

    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

    0 讨论(0)
  • 2020-12-13 13:31

    If you want to make floating preview box/ any other widget just use below

    thumbnail = new QLabel;
    thumbnail->setAttribute(Qt::WA_ShowWithoutActivating);
    thumbnail->setParent(0);
    thumbnail->setWindowFlags(Qt::Tool | Qt::FramelessWindowHint|Qt::WindowStaysOnTopHint);
    

    Qt::Tool is important flag to make it work. I mean not stealing focus.

    0 讨论(0)
提交回复
热议问题