#include #include "singleapplication.h" #ifdef Q_OS_WINDOWS #include #endif void raiseWidget(QWidget* widget); int main(int argc, char *argv[]) { #ifdef Q_OS_WINDOWS SingleApplication app(argc, argv, true); if (app.isSecondary()) { AllowSetForegroundWindow( DWORD( app.primaryPid() ) ); app.sendMessage("RAISE_WIDGET"); return 0; } #else SingleApplication app(argc, argv); #endif QWidget* widget = new QWidget; #ifdef Q_OS_WINDOWS QObject::connect(&app, &SingleApplication::receivedMessage, widget, [widget] () { raiseWidget(widget); } ); #else QObject::connect(&app, &SingleApplication::instanceStarted, widget, [widget] () { raiseWidget(widget); } ); #endif widget->show(); return app.exec(); } void raiseWidget(QWidget* widget) { #ifdef Q_OS_WINDOWS HWND hwnd = (HWND)widget->winId(); // check if widget is minimized to Windows task bar if (::IsIconic(hwnd)) { ::ShowWindow(hwnd, SW_RESTORE); } ::SetForegroundWindow(hwnd); #else widget->show(); widget->raise(); widget->activateWindow(); #endif }