Было много вопросов на эту тему, я решил предложить свой, рабочий :)
При повторном запуске отправляет окно программы на передний план.
main.cpp
...
QLabel label("text");
QSharedMemory sharedMemory("SonetTest");
const int size = sizeof(void*);
if(!sharedMemory.create(size, QSharedMemory::ReadWrite))
{
sharedMemory.lock();
SetForegroundWindow (*(HWND*)sharedMemory.constData());//вынимаем указатель как содержимое указателя на constData
//qWarning() << "has attached id" << *(HWND*)sharedMemory.constData();
sharedMemory.unlock();
sharedMemory.detach();
return 0;
}
else
{
label.show();
sharedMemory.lock();
*((void**)sharedMemory.data()) = label.winId();//засовываем указатель в содержимое data
//qWarning() << "now id attached" << (*(HWND*)sharedMemory.constData());
sharedMemory.unlock();
}