QTSingleApplication由Qt官方提供的,用於實現只啟動一個實例,並在啟動時可以向向另一個實例通信(依賴於QtNetwork模塊)
QTSingleApplication下載路徑:
鏈接:https://pan.baidu.com/s/1bBLgkpOW3lq6ZQj9ultxyA
提取碼:2n9h
1. 添加源碼到工程
將QTSingleApplication解壓,將解壓后目錄拷貝到當前項目路徑下,在項目pro文件中增加下面這行
2. 修改main.cpp,將以前QApplication改為QtSingleApplication
修改后的代碼如下所示:
#include <QtGui> #include "myui.h" #include "QtSingleApplication.h"
int main(int argc, char *argv[]) { QtSingleApplication a("myapp_id",argc, argv); if(a.isRunning()) //判斷實例是否已經運行
{ qDebug()<<"this is already running"; a.sendMessage("raise_window_noop", 4000); //4s后激活前個實例
return EXIT_SUCCESS; } myUi w; a.setActivationWindow(&w,1); //如果是第一個實例,則綁定,方便下次調用
w.show(); return a.exec(); }
1)分析QtSingleApplication a("myapp_id",argc, argv);
其中"myapp_id"字符串表示給當前APP添加ID串,好處就是避免程序不受存放路徑影響
2)分析a.setActivationWindow(&w,1)
setActivationWindow函數代碼如下圖所示:
當我們參數為1時,將會連接信號與槽.
表示當我們調用sendMessage()時,將會調用messageReceived()信號函數,最終調用activateWindow()函數.
activateWindow函數代碼如下圖所示:
所以只要我們調用a.sendMessage()時,便會將上個示例激活
參考來自: https://blog.csdn.net/gatieme/article/details/50600172