QtSingleApplication 实现单例模式 【实际项目,亲测可用哈】

简介: QtSingleApplication 实现单例模式 【实际项目,亲测可用哈】

一、达到期望结果:

qt应用实现程序单例化执行


我用的环境:


系统:麒麟v10.1


qt版本:5.12.8



二、单例模式前后效果对比:

1)未加单例模式之前,每次点击运行后,都会弹出一个对话框,点击三次后效果如下


1.png


图1


2)加单例模式之后,每次点击运行,不会再重复弹窗,保证程序只执行一次


原理:用的QLocalServer/QLocalSocket建立本地socket来判断实例是否存在


1.png


三、实现过程

1、新建一个Qt Widgets Application的项目


1.png


其余的名称、路径,按自己需要选择即可,然后一直点击【下一步】,就可创建一个简单项目;


1.png


此时点击运行,出现的就是使用单例模式前的效果图(图1);


2、添加单例模式所需文件和代码


下载单例模式所需文件,我放在下载资源里了(不需要积分和C币哈),将文件下载好后,解压到项目里;


1)下载资源文件并放入项目中:


下载地址:


https://download.csdn.net/download/qq_41539778/20816781


解压后是一个叫【qt-solutions】的文件夹

1.png1.png



将【qt-solutions】文件夹放在项目中,与main.cpp同级


1.png


2)在qt中将资源文件导入至项目


右键点击项目名--添加现有文件


1.png


在项目路径中找到qt-solutions文件夹--qtsingleaoolication--找到以下四个文件选择打开;

qtlocalpeeer.cpp
qtlocalpeer.h
qtsingleapplication.cpp
qtsingleapplication.h

1.png


注意:此处不需要导入全部文件,当然,如果你想全导入,也没有影响哈,就是qt项目里文件太多了;


选择【打开】后,会发现项目中多了两个文件夹


1.png


3)修改 .pro代码


在项目.pro文件中加一行 【很重要!!!不加不行】

QT       += network

1.png

4)修改main.cpp代码


加include

#include "qt-solutions/qtsingleapplication/qtsingleapplication.h"

修改前

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

修改后

int main(int argc, char *argv[])
{
    QtSingleApplication a(argc, argv);
    if (a.isRunning())
    {
        a.sendMessage("raise_window_noop");
        return EXIT_SUCCESS;
    }
    MainWindow w;
    w.show();
    return a.exec();
}

1.png



5)构建运行


将项目重新构建--点击运行


会发现只能运行一次,只能开一个应用


完成!


相关文章
|
搜索推荐 Java 数据处理
【亲测可用】Elesticsearch从入门到精通实例
【亲测可用】Elesticsearch从入门到精通实例
702 0
|
前端开发 JavaScript
electron入门(16.0版本亲测可用)
electron入门全记录,亲测可用
162 1
|
存储 算法 编译器
【C++技能树】再也不怕没有对象了 --初识类
我们先来看看C语言解决一个问题的过程。
85 0
|
存储 前端开发 Java
二十三.SpringCloudConfig源码-初始化配置
今天这篇文章我们来分析一下Spring Cloud Config 配置中心的源码,这应该是Spring Cloud Netflix的源码分析的最后一篇。下一个系列我将会继续分析Spring Cloud Alibaba相关组件的源码。Spring Cloud Config 基础使用请移步 《[配置中心Spring Cloud Config](https://blog.csdn.net/u014494148/article/details/117253831)》
一劳永逸,wsl2出现“参考的对象类型不支持尝试的操作”的解决办法
wsl在使用是会出现“参考的对象类型不支持尝试的操作”的故障导致无法使用。
2649 1
一劳永逸,wsl2出现“参考的对象类型不支持尝试的操作”的解决办法
|
Java Maven
同事被嘲笑后找到多种解决SpringBoot项目编译运行提示“程序包xxx不存在,找不到符号”方案
同事被嘲笑后找到多种解决SpringBoot项目编译运行提示“程序包xxx不存在,找不到符号”方案
354 0
同事被嘲笑后找到多种解决SpringBoot项目编译运行提示“程序包xxx不存在,找不到符号”方案
|
Oracle IDE Java
最详细的Android开发环境配置经验分享(包含配置过程中可能出现的问题及解决办法。繁琐的配置步骤是否是你头疼呢,详细配置步骤你值得拥有!)
最详细的Android开发环境配置经验分享(包含配置过程中可能出现的问题及解决办法。繁琐的配置步骤是否是你头疼呢,详细配置步骤你值得拥有!)
455 0
最详细的Android开发环境配置经验分享(包含配置过程中可能出现的问题及解决办法。繁琐的配置步骤是否是你头疼呢,详细配置步骤你值得拥有!)
|
Java Shell API
Android开发 常见异常和解决办法(一)(上)
Android Studio是Android开发的理想工具,但是由于版本的更新和配置的差异,会出现很多问题,下面是以《第一行代码 第二版》为基础进行开发学习可能遇见的一些问题及其解决办法。
Android开发 常见异常和解决办法(一)(上)
|
XML Android开发 数据格式
Android开发 常见异常和解决办法(一)(下)
Android Studio是Android开发的理想工具,但是由于版本的更新和配置的差异,会出现很多问题,下面是以《第一行代码 第二版》为基础进行开发学习可能遇见的一些问题及其解决办法。
Android开发 常见异常和解决办法(一)(下)
|
SQL 前端开发 大数据
编程实用工具大全(二)(前后端皆可用,不来看看?)
1.零代码工具箱 - 专为前端打造 1. SVG波浪背景生成器 2.在线生成 新拟态风格 CSS 代码 3.在线生成CSS玻璃形态效果 4.CSS文本排版工具 2. 在线模拟数据生成器-专为后端打造 3.VARBook-适合英语基础薄弱者 4.零代码 - Table在线布局工具(Excel转HTML) 5.随意构建有机外观的形状
编程实用工具大全(二)(前后端皆可用,不来看看?)