Bring window to front -> raise(),show(),activateWindow() don’t work

前端 未结 5 1614
南方客
南方客 2020-12-06 04:43

In my Qt-application I open a URL in the default-browser. Afterwards I want to bring the main-window of my application to the front again.

I tried all approaches I c

相关标签:
5条回答
  • 2020-12-06 04:52
    for ( QWindow* appWindow : qApplication.allWindows() )
    {
      appWindow->show(); //bring window to top on OSX
      appWindow->raise(); //bring window from minimized state on OSX
    
      appWindow->requestActivate(); //bring window to front/unminimize on windows
    }
    

    Note that this also brings up the window from other virtual desktops on both OSX and Windows. I did not test this on linux, it may work though.

    0 讨论(0)
  • 2020-12-06 05:06

    This issue is not specific to Windows....I have the same issue on Linux. My solution was to close() the window before I re open() it.

    0 讨论(0)
  • 2020-12-06 05:09

    try this:

    viewer.setWindowState( (windowState() & ~Qt::WindowMinimized) | Qt::WindowActive);
    viewer.raise();  // for MacOS
    viewer.activateWindow(); // for Windows
    

    it work in my project ( in my project viewer is QMainWindow): https://github.com/iptton/Rythem .

    0 讨论(0)
  • 2020-12-06 05:11

    This problem is specific to Windows. If the active window belongs to some process, then Windows does not allow other processes to change the active Window.

    (Do not try the following: https://wiki.qt.io/Qt_project_org_faq#QWidget_::activateWindow.28.29_-_behavior_under_windows)

    0 讨论(0)
  • 2020-12-06 05:12

    I did it like this:

    {
     this->show(); // Restore from systray
     this->setWindowState(Qt::WindowState::WindowActive); // Bring window to foreground
    }
    

    assuming "this" is your QMainWindow. Worked like a charm.

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