QTSingleApplication,是Qt官方提供的,用於實現只啟動一個實例,並在啟動時向另一個實例通信(依賴於QtNetwork模塊)
默認情況下,收到消息后會自動激活自身窗口
(一)簡單使用:
(1)將里面的qtsingleapplication目錄拷貝到項目的源碼目錄中,
(2)然后修改項目的.pro文件,加入下面一行代碼
include(../qtsingleapplication/src/qtsingleapplication.pri)(3)修改main.cpp文件,加入頭文件
#include <QtSingleApplication>並且
QtSingleApplication app(argc, argv);
if (app.isRunning()){
app.sendMessage("raise_window_noop");
return EXIT_SUCCESS;
}
........
QMainWindow w;
app.setActivationWindow(&w);
.......
(4)完成
(二)改進使用:
(1)識別程序
默認情況下,QtSingleApplication使用QApplication::applicationFilePath作為自己的appId,用於識別不同的app
如果希望不受程序存放路徑影響,則需要在指定appId即可。如下
QtSingleApplication app(QLatin1String("my_app_id"),argc, argv);
這樣即便是在不同的目錄的程序,仍能互斥
(2)發送消息和激活窗口
收發消息是QtSingleApplication特有的功能,而QApplication是不具有的。
默認情況下,QtSingleApplication接收到任何消息之后,都會自身的窗口窗口。如果不希望激活窗口,則可以自行設定,甚至重新連接信號槽。如下
app.setActivationWindow(&w,false);
QObject::connect(&app, SIGNAL(messageReceived(const QString&)),&w, SLOT(handleMessage(const QString&)));