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", ); //4s后激活前个实例
return EXIT_SUCCESS;
}
myUi w;
a.setActivationWindow(&w,);       //如果是第一个实例,则绑定,方便下次调用
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

37.QT-QTSingleApplication-程序只运行一个实例的更多相关文章

  1. vc++高级班之窗口篇[4]---让程序只运行一个实例

      大家都看过或者使用过类似只运行一个实例的程序,比如:QQ游戏.部分浏览器 等等! 让一个程序只运行一个实例的方法有多种,但是原理都类似,也就是在程序创建后,有窗口的程序在窗口创建前, 检查系统中是 ...

  2. VC 实现程序只运行一个实例,并激活已运行的程序

    转载:http://blog.sina.com.cn/s/blog_4b44e1c00100bh69.html 进程的互斥运行:CreateMutex函数实现只运行一个程序实例 正常情况下,一个进程的 ...

  3. C#让应用程序只运行一个实例的几种方法

    一 判断是否有相同的实例已经运行 1 根据“Mutex”判断是否有相同的实例在运行 /// <returns>已有实例运行返回true,否则为false</returns>pu ...

  4. [VC]在VC++中实现让程序只运行一个实例的方法且实现该实例

    方法一: 有时候在开发应用程序时,希望控制程序运行唯一的实例.例如,最常用的mp3播放软 件Winamp,由于它需要独占计算机中的音频设备,因此该程序只允许自身运行唯一的一个例程.在Visual C+ ...

  5. Java程序只运行一个实例[转]

    如果希望你的Java程序只能存在一个实例,可以参考下面的用法. 原文链接:http://blog.csdn.net/yaerfeng/article/details/7264729 Java没有提供这 ...

  6. VC程序只运行一个实例,并在打开多个时激活原窗口

    (一)单文档应用程序   1.在应用程序类C~~App::InitInstance()函数中判断是否已有一个应用程序实例正在运行 BOOL C~~App::InitInstance() {     . ...

  7. Winform(C#)限制程序只运行一个实例

    C#控制只运行开启一个程序 在这个例子中不需要调用ReleaseMutex,mutex会在程序结束时自动释放.为了防止mutex过早释放,在程序的最后调用下GC.KeepAlive (mutex). ...

  8. 让程序只运行一个实例(Delphi篇)(三种方法,其中使用全局原子的方法比较有意思)

    Windows 下一个典型的特征就是多任务,我们可以同时打开多个窗口进行操作,也可以同时运行程序的多个实例,比如可以打开许多个资源管理器进行文件的移动复制操作.但有时出于某种考虑(比如安全性),我们要 ...

  9. WPF程序只运行一个实例

    1.WPF程序在 启动窗口的构造函数执行InitializeComponent之前判断是否已经存在实例 不涉及服务器情况,可直接进行判断(不在mainwindow的构造函数中判断) // public ...

  10. 关于WPF程序只运行一个实例的方法

    找到的方法有两种: 1)http://www.cnblogs.com/liuyazhou/archive/2009/11/02/1594364.html 2)http://codereview.sta ...

随机推荐

  1. MySql解除安全模式:Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column.

    在修改一条数据字段时报错: Error Code: 1175. You are using safe update mode and you tried to update a table witho ...

  2. java 加解密

    import javax.crypto.*; import javax.crypto.spec.SecretKeySpec; import java.io.UnsupportedEncodingExc ...

  3. Ubuntu 16.04下安装搜狗输入法

    在确保更新了国内镜像源的前提下: 安装sogou输入法步骤 一.安装fcitx键盘输入法系统(系统已安装的可忽略此步骤) 1.添加以下源 sudo add-apt-repository ppa:fci ...

  4. DCOS实践分享(5):Open DCOS深入分析

    2016/05/18(三) 09:30 OpenDC/OS研討會暨工作坊 指導單位:經濟部.科技部 主辦單位:工業技術研究院.Linker Networks 協辦單位:Microsoft.資通訊產業聯 ...

  5. 分门别类总结Java中的各种锁,让你彻底记住

    概念 公平锁/非公平锁 公平锁是指多个线程按照申请锁的顺序来获取锁. 非公平锁是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁.有可能,会造成优先级反转或者饥 ...

  6. [Swift]LeetCode24. 两两交换链表中的节点 | Swap Nodes in Pairs

    Given a linked list, swap every two adjacent nodes and return its head. Example: Given 1->2->3 ...

  7. [Swift]LeetCode785. 判断二分图 | Is Graph Bipartite?

    Given an undirected graph, return true if and only if it is bipartite. Recall that a graph is bipart ...

  8. [Swift]LeetCode1007. 行相等的最少多米诺旋转 | Minimum Domino Rotations For Equal Row

    In a row of dominoes, A[i] and B[i] represent the top and bottom halves of the i-th domino.  (A domi ...

  9. linux入门--Linux发行版本详解

    从技术上来说,李纳斯•托瓦兹开发的 Linux 只是一个内核.内核指的是一个提供设备驱动.文件系统.进程管理.网络通信等功能的系统软件,内核并不是一套完整的操作系统,它只是操作系统的核心.一些组织或厂 ...

  10. ubuntu(版本14.04)部署Core环境

    遇到问题: 参照官方文档敲完命令之后 出现了提示的问题Unable to lpcate package... ,随后参照官方文档解决方案,又出现了如下问题: 提示找不到依赖的Runtime,在尝试过很 ...