Important: Please read the Qt Code of Conduct -

Bring application to front - portable way

  • Hello forum!

    First of all, here's my setup: Windows 7 - 64bits, Qt 5.2.0. (MSVC 2010, 32 bit), Qtcreator 3.0.0. Developped application based on QMainWindow.

    I'm currently trying to figure out a Qt (portable) way of bringign my application back to front, when it receives a defined tcp message.(The tcp stuff works perfectly - yay!)
    I know there are a few topics and answers around the internet and on QtForum, like this one:
    Re: Bring window to front -> raise()
    ... but they're all old, and not working in my case.

    I've tried lots of things and combinations of raise(), activatewindow(), setWindowFlags(), show() and whatnot.
    The only thing that partially worked was

    setWindowFlags(windowFlags() ^ Qt::WindowStaysOnTopHint);
    setWindowFlags(windowFlags() & ~Qt::WindowStaysOnTopHint);

    or other ways of writing it but I hit a problem with that because the window stays on top, as if you couldn't remove
    the Qt::WindowStaysOnTopHint flag.

    So the workaround I found was call native Win32 API:

        SetWindowPos((HWND)winId(), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
        SetWindowPos((HWND)winId(), HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);

    Then it works, my app is back to front, but not locked to front!
    Kinda hacky you say? ... yes, and I dont't like it bc it's not portable.

    Anyone would have a Qt solution?
    Thx for your time and neurons.