【QT】QtSingleApplication 实现单例模式 (实际项目,图文详解,亲测可用)

目录

一、达到期望结果& 环境:

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

三、实现过程


一、达到期望结果& 环境:

实验目标:

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

我用的环境:

    系统:麒麟v10.1

    qt版本:5.12.8

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

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

【QT】QtSingleApplication 实现单例模式 (实际项目,图文详解,亲测可用)_第1张图片

图1

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

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

【QT】QtSingleApplication 实现单例模式 (实际项目,图文详解,亲测可用)_第2张图片

三、实现过程

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

【QT】QtSingleApplication 实现单例模式 (实际项目,图文详解,亲测可用)_第3张图片

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

【QT】QtSingleApplication 实现单例模式 (实际项目,图文详解,亲测可用)_第4张图片

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

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

下载单例模式所需文件,我放在下载资源里了,将文件下载好后,解压到项目里;

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

下载地址:

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

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

【QT】QtSingleApplication 实现单例模式 (实际项目,图文详解,亲测可用)_第5张图片

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

【QT】QtSingleApplication 实现单例模式 (实际项目,图文详解,亲测可用)_第6张图片

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

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

【QT】QtSingleApplication 实现单例模式 (实际项目,图文详解,亲测可用)_第7张图片

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

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

【QT】QtSingleApplication 实现单例模式 (实际项目,图文详解,亲测可用)_第8张图片

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

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

【QT】QtSingleApplication 实现单例模式 (实际项目,图文详解,亲测可用)_第9张图片

3)修改 .pro代码

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

QT       += network

【QT】QtSingleApplication 实现单例模式 (实际项目,图文详解,亲测可用)_第10张图片

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();
}

【QT】QtSingleApplication 实现单例模式 (实际项目,图文详解,亲测可用)_第11张图片

5)构建运行

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

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

完成!

--END--

你可能感兴趣的:(Qt,单例模式,qt)