QTSingleApplication 使用笔记

13 篇文章 2 订阅

QT 版本 5.8 MSVC2015 64

首先下载地址:http://code.qt.io/cgit/qt-solutions/qt-solutions.git/

git一下:

 

那个qtsingleapplication就是了

继续参照 https://www.cnblogs.com/kevinzhwl/archive/2012/08/27/2658839.html

不过,目录改变了,C:\Qt\qt-solutions\qtsingleapplication\src\qtsingleapplication.pri

中间多了一个 src ,在 pro 文件中,增加这个目录。

include(C:\Qt\qt-solutions\qtsingleapplication\src\qtsingleapplication.pri)

每次打开pro会出现一个 config.pri 文件找不到的提示,好像没影响,继续。同时,右侧多了一个qtsingleapplication的

 

 

在main.cpp测试一下:

    int ret=0;

    QtSingleApplication singleApp(argc, argv);

    if (singleApp.isRunning())
    {
        singleApp.sendMessage("raise_window_noop");
        return EXIT_SUCCESS;
    }


    MainWindow w;

    singleApp.setActivationWindow(&w);


    QObject::connect(&singleApp,&QtSingleApplication::messageReceived,&singleApp,&QtSingleApplication::activateWindow);


    w.show();    


      ret = singleApp.exec();

    return ret;

 

 

 

不过,更好的方法是使用 bool sendMessage ( const QString & message, int timeout = 5000 )。这个更规范,具体自己看了。

 

这里面的关系是:

 

  1. 首先启动一个实例,假设是app0;注意Main.cpp里面,把MainWindow设为活动窗口。singleApp.setActivationWindow(&w);
  2. 启动第二个实例app2,此时app2发现已经有实例存在,sendMessage("raise_window_noop"); 后自行退出。这个文字,可作为消息在第一个messageReceived中获取。而新打开的是没有文字的,如果要有提示,则自己用MessageBox提示一下退出即可。
  3. 实例app0收到信号,messageReceived,调用默认槽函数&QtSingleApplication::activateWindow
  4. 这个Activating Window就是刚才步骤1 里面设置的setActivationWindow(&w),等于是实例2启动了初始实例。

 

参考资料:

官方:http://code.qt.io/cgit/qt-solutions/qt-solutions.git/

官方资料:http://doc.qt.io/archives/qtextended4.4/qtopiadesktop/qtsingleapplication.html#sendMessage

中文资料:https://www.cnblogs.com/kevinzhwl/archive/2012/08/27/2658839.html

https://blog.csdn.net/u010445843/article/details/49611455

https://blog.csdn.net/iamsujin/article/details/53257038

 

 

 

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值