只能运行单个实例的解决方案

  • 2020 年 2 月 24 日
  • 笔记

❝介绍使用Qt的库实现的“只能运行单个实例的解决方案”。❞

源码地址

https://github.com/qtproject/qt-solutions/tree/master/qtsingleapplication  

基本原理

  • 使用文件读写锁+QLocalServer创建服务端/客户端实现。
  • 第一次运行实例QtSingleApplication将会创建一个本地服务端,而第二次运行的QtSingleApplication将会创建客户端即触发重复创建实例的行为。

使用方法

  • qtsingleapplication目录复制到你的项目工程下;
  • 在你的项目工程文件中添加以下代码:
include(qtsingleapplication/src/qtsingleapplication.pri)  
  • 代码简单使用:
#include "qtsinglecoreapplication.h"  int main(int argc, char *argv[])  {      QtSingleApplication a(argc, argv);      /* 判断实例是否已运行 */      if(a.isRunning())      {          ...      }          ...  }  

关于QtSingleApplication

  • QtSingleApplication类继承于QApplication
  • setActivationWindow用于设置需要激活的某个窗口;
  • activateWindow激活预先设置好的某个窗口。
  • sendMessage信号为发送消息给第一次创建的实例(由第二次创建实例发出)。
  • messageReceived槽函数用于接收第二次创建实例的消息。