Скрытие и повторный запуск одного и того же экземпляра QApplication в Qt

у меня есть QApplication в котором у меня есть обычай QDialog, Диалог предлагает пользователям набор параметров, а затем запускает процесс через QProcess, Пока запущенный процесс все еще работает, приложение, если оно закрыто, все еще должно работать. Чтобы добиться этого, я повторно внедрил closeEvent из QWidget а также accept()ред или ignore()Редактировал событие в зависимости от того, запущен процесс или нет.

в closeEvent() функция, я прячу свою QDialog, При этом для пользователя приложение закрывается (однако оно запускается в диспетчере задач). Я ожидаю, что пользователь перезапустит приложение, запустив программу снова. На данный момент мне нужно выяснить, что другой экземпляр уже запущен и этот экземпляр должен выйти на передний план.

Может кто-нибудь помочь мне с тем, как я могу этого достичь?

1

Решение

Именованный мьютекс может быть использован для решения.

это статья полезно

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;
}
2

Другие решения

До Qt 5 существовал проект под названием QtSingleApplication, который позволяет запускать только один экземпляр приложения и вызывал бы запущенное приложение, если пользователь попытался открыть другой.

Если вы выполните поиск в Google по запросу «qtsingleapplication qt5», вы найдете больше информации об исправлениях для QtSingleApplication для работы с Qt5.

Эта тема может помочь тоже.

2

По вопросам рекламы [email protected]