QT 版本 5.15.2 MSVC2019 32
首先下载地址:http://code.qt.io/cgit/qt-solutions/qt-solutions.git/
QtSingleApplication singleApp(argc, argv);
if (singleApp.isRunning())
{
singleApp.sendMessage("raise_window_loop");
return 0;
}
MainWindow w;
singleApp.setActivationWindow(&w);
QObject::connect(&singleApp,&QtSingleApplication::messageReceived,&singleApp,&QtSingleApplication::activateWindow);
w.show();
return singleApp.exec();
`
1. 首先启动一个实例,假设是app0;注意Main.cpp里面,把MainWindow设为活动窗口。singleApp.setActivationWindow(&w);
2. 启动第二个实例app2,此时app2发现已经有实例存在,sendMessage("raise_window_noop"); 后自行退出。这个文字,可作为消息在第一个messageReceived中获取。而新打开的是没有文字的,如果要有提示,则自己用MessageBox提示一下退出即可。
3. 实例app0收到信号,messageReceived,调用默认槽函数&QtSingleApplication::activateWindow
这个Activating Window就是刚才步骤1 里面设置的setActivationWindow(&w),等于是实例2启动了初始实例。
这个只对1个APP效果好,如果会启动子APP或者APP自己重启自己就不太好用了