如果实例已经 运行,请重新打开 Qt 桌面应用程序
Reopen a Qt desktop app if an instance is already running
我会尽力解释我的问题,但我对这一切都很陌生。我有一个 Windows 桌面 Qt 应用程序。应用程序只能有一个实例 运行。 main.cpp
.
中的 MSDN 互斥句柄确保了这一点
HANDLE mutex = CreateMutex(NULL, TRUE, lpName);
if (mutex == NULL || GetLastError() == ERROR_ALREADY_EXISTS){
QMessageBox::information(0, "Info", "Application is already running.");
return 0;
}
现在我要做的是在有人试图打开应用程序时重新打开 运行 应用程序。通过重新打开,我的意思是 show()
此时可能被隐藏(通过 hide()
方法)的 MainWindow
。我真的不知道这是如何实现的。
查看 QSystemSemaphore which could be accessed by multiple processes (instances of your class). Also this article might be helpful: Inter-Process Communication in Qt。
另请注意,在没有必要的情况下,将 Qt
与 WinAPI
混合使用并不是一个好主意。
我在这里找到了答案:
How I show application when open application again Qt
QLocalServer
和 QLocalSocket
对我有用。
我会尽力解释我的问题,但我对这一切都很陌生。我有一个 Windows 桌面 Qt 应用程序。应用程序只能有一个实例 运行。 main.cpp
.
HANDLE mutex = CreateMutex(NULL, TRUE, lpName);
if (mutex == NULL || GetLastError() == ERROR_ALREADY_EXISTS){
QMessageBox::information(0, "Info", "Application is already running.");
return 0;
}
现在我要做的是在有人试图打开应用程序时重新打开 运行 应用程序。通过重新打开,我的意思是 show()
此时可能被隐藏(通过 hide()
方法)的 MainWindow
。我真的不知道这是如何实现的。
查看 QSystemSemaphore which could be accessed by multiple processes (instances of your class). Also this article might be helpful: Inter-Process Communication in Qt。
另请注意,在没有必要的情况下,将 Qt
与 WinAPI
混合使用并不是一个好主意。
我在这里找到了答案: How I show application when open application again Qt
QLocalServer
和 QLocalSocket
对我有用。