37.QT-QTSingleApplication-程序只運行一個實例


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM