проверьте проект QtSingleApplication, найденный в https://github.com/qtproject/qt-solutions.
В классе QtSingleApplication есть метод с именем activWindow .В примере Loader этот метод вызывается при каждом запуске второго экземпляра программы.
Чтобы главное окно стало верхним, когда вы пытаетесь открыть второй экземпляр, вам нужно изменить этот метод следующим образом.
void QtSingleApplication::activateWindow()
{
if (actWin) {
actWin->setWindowState(actWin->windowState() & ~Qt::WindowMinimized);
actWin->activateWindow();
actWin->raise();
//winapi call
SetWindowPos((HWND)actWin->winId() , HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
//hack to prevent sticking window to the fore
SetWindowPos((HWND)actWin->winId() , HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
}
}
Предупреждение: это только для оконРешение, и оно работает на моей машине.Также обязательно включите в реализацию windows.h .
[править] В моем коде была проблема, которая после активации окна оставалась на переднем плане.Этот взлом исправляет это.