text: Q:
  
  Как сделать приложение одиночка?
  
  Как сделать приложение одиночка средствами Qt5+ под Windows (xp, 7, 8, 10) ?
  Чтобы нельзя было запустить два экземпляра одновременно.
  
  A:
  
  Файл блокировки
  Файл будет удалён автоматически
  Каждый пользователь может запустить свою версию.  
  #include <QString>
  #include <QLockFile>
  #include <QDir>
  #include <QMessageBox>
  
  QString tmpDir = QDir::tempPath();
  QLockFile lockFile(tmpDir + "/<unique identifier>.lock");
  
  if(!lockFile.tryLock(100)){
      QMessageBox msgBox;
      msgBox.setIcon(QMessageBox::Warning);
      msgBox.setText("You already have this app running."
                      "\r\nOnly one instance is allowed.");
      msgBox.exec();
      return 1;
  }
  
  Семафоры и разделяемая память
  Уникальный инстанс приложения на всю машину
  QSystemSemaphore sema("<unique identifier>", 1);
      sema.acquire();
  
  #ifndef Q_OS_WIN32
      // в Unix разделяемая память не чистится при креше
      // Очищаем, если осталась от предыдущих запусков
      QSharedMemory nix_fix_shmem("<unique identifier 2>");
      if(nix_fix_shmem.attach()){
          nix_fix_shmem.detach();
      }
  #endif
  
      QSharedMemory shmem("<unique identifier 2>");
      bool is_running;
      if (shmem.attach()){
          is_running = true;
      }else{
          shmem.create(1);
          is_running = false;
      }
      sema.release();
  
      if(is_running){
          QMessageBox msgBox;
          msgBox.setIcon(QMessageBox::Warning);
          msgBox.setText("You already have this app running."
                          "\r\nOnly one instance is allowed.");
          msgBox.exec();
          return 1;
      }
  
  