使用QSharedMemory防止多开,方式很巧妙。
这种方式是我阅读网友用Qt高仿360安全卫士9.2开源代码看到的,不理解其用意,群里前辈解答的,贴出来方便更多人。
#include <QApplication>
#include <QTextCodec>
#include <QSharedMemory>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QTextCodec *codec = QTextCodec::codecForName("System");
QTextCodec::setCodecForLocale(codec);
//使用QSharedMemory防止多开
QSharedMemory shared_memory;
shared_memory.setKey(QString("main_window"));
if(shared_memory.attach())
{
return 0;
}
if(shared_memory.create(1))
{
Dialog w;
w.show();
return app.exec();
}
}
使用QSharedMemory防多开方法,优点是简单,缺点是无法激活已存在的进程窗口,所以我新增了一种优化方法,
使用QLocalServer,QLocalSocket方式实现单实例进程,并激活已有进程的主窗口,详情请移步