2014-03-13 58 views
1

我有一個QApplication其中我有一個自定義QDialog。該對話框爲用戶提供一組選項,然後通過QProcess啓動一個流程。雖然啓動的程序仍在運行,但如果關閉的應用程序仍然運行。爲了達到這個目的,我根據是否啓動了一個進程,重新實現了closeEventQWidgetaccept() ed或ignore()在Qt中隱藏和重新啓動QApplication的相同實例

closeEvent()函數中,我隱藏了我的QDialog。有了這個,對於用戶來說,應用程序是關閉的(它將在任務管理器中運行)。我希望用戶通過再次運行程序來重新啓動應用程序。在這一點上,我需要弄清楚另一個實例已經在運行,那個實例應該到達前臺。

任何人都可以幫助我如何做到這一點?

+0

這是否僅僅是爲了在關閉應用程序時不終止進程?然後,你可以使用'QProcess :: startDetached'或者類似於這個答案來啓動進程分離:https://stackoverflow.com/questions/33874243/qprocessstartdetached-but-hide-console-window –

回答

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

Pre Qt 5中有一個名爲QtSingleApplication的項目,它只允許運行一個應用程序的一個實例,並在用戶試圖打開另一個應用程序時引發正在運行的應用程序。

如果您針對「qtsingleapplication qt5」執行Google搜索,您會發現更多關於QtSingleApplication與Qt5一起使用的修復信息。

This thread也可能有幫助。

相關問題