我有QApplication
我有自定义QDialog
。该对话框为用户提供了一组选项,然后通过QProcess
启动流程。虽然启动的流程仍在运行,但应用程序如果关闭仍必须运行。为实现这一目标,我根据流程是否启动,重新实施了closeEvent
QWidget
和accept()
ed或ignore()
事件。
在closeEvent()
函数中,我隐藏了QDialog
。这样,对于用户,应用程序将关闭(但它将在任务管理器中运行)。我希望用户通过再次运行程序来重新启动应用程序。在这一点上,我需要弄清楚另一个实例已在运行,并且该实例应该到达前台。
任何人都可以帮我解决这个问题吗?
答案 0 :(得分:2)
Pre Qt 5有一个名为QtSingleApplication的项目,该项目只允许一个应用程序实例运行,如果用户试图打开另一个应用程序,则会引发正在运行的应用程序。
如果您使用Google搜索“qtsingleapplication qt5”,您可以找到有关QtSingleApplication修复程序的更多信息,以便与Qt5一起使用。
This thread也可能会有所帮助。
答案 1 :(得分:2)
可以使用命名互斥来解决。
这article有用。
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;
}