у меня есть QApplication
в котором у меня есть обычай QDialog
, Диалог предлагает пользователям набор параметров, а затем запускает процесс через QProcess
, Пока запущенный процесс все еще работает, приложение, если оно закрыто, все еще должно работать. Чтобы добиться этого, я повторно внедрил closeEvent
из QWidget
а также accept()
ред или ignore()
Редактировал событие в зависимости от того, запущен процесс или нет.
в closeEvent()
функция, я прячу свою QDialog
, При этом для пользователя приложение закрывается (однако оно запускается в диспетчере задач). Я ожидаю, что пользователь перезапустит приложение, запустив программу снова. На данный момент мне нужно выяснить, что другой экземпляр уже запущен и этот экземпляр должен выйти на передний план.
Может кто-нибудь помочь мне с тем, как я могу этого достичь?
Именованный мьютекс может быть использован для решения.
это статья полезно
WINAPI WinMain(
HINSTANCE, HINSTANCE, LPSTR, int)
{
try {
// Try to open the mutex.
HANDLE hMutex = OpenMutex(
MUTEX_ALL_ACCESS, 0, "MyApp1.0");
if (!hMutex)
// Mutex doesn’t exist. This is
// the first instance so create
// the mutex.
hMutex =
CreateMutex(0, 0, "MyApp1.0");
else
// The mutex exists so this is the
// the second instance so return.
return 0;
Application->Initialize();
Application->CreateForm(
__classid(TForm1), &Form1);
Application->Run();
// The app is closing so release
// the mutex.
ReleaseMutex(hMutex);
}
catch (Exception &exception) {
Application->
ShowException(&exception);
}
return 0;
}
До Qt 5 существовал проект под названием QtSingleApplication, который позволяет запускать только один экземпляр приложения и вызывал бы запущенное приложение, если пользователь попытался открыть другой.
Если вы выполните поиск в Google по запросу «qtsingleapplication qt5», вы найдете больше информации об исправлениях для QtSingleApplication для работы с Qt5.
Эта тема может помочь тоже.