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&)));