QT无弹窗运行和只允许运行一个exe
最近做一个小功能,需要后台运行QT程序,无弹窗,并且只允许一个exe运行,不关闭程序,无法2次启动。
main.cpp
#include "deleteshotcurveflie.h"
#include <QApplication>
#include <QSharedMemory>
#include <QMessageBox>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
DeleteShotCurveFlie w;
// 创建一个QSharedMemory对象来检查是否已经存在实例
QSharedMemory sharedMemory("UniqueApplicationName");
// 尝试附加到共享内存段
if (!sharedMemory.attach())
{
// 如果无法附加,说明这是第一个实例
sharedMemory.create(1); // 创建一个1字节的共享内存段
// 创建并显示主窗口
w.show();
w.hide();
// 开始事件循环
int ret = a.exec();
// 程序退出时释放共享内存
sharedMemory.detach();
return ret;
}
else
{
// 如果已经附加到共享内存,说明已经有实例在运行
QMessageBox::information(nullptr, "程序运行中", "该程序已经在运行中,不能打开第二个窗口。");
w.raise();
return 0;
}
}
deleteshotcurveflie.cpp
#include "deleteshotcurveflie.h"
#include <QFileSystemWatcher>
#include <QDir>
#include <QDebug>
DeleteShotCurveFlie::DeleteShotCurveFlie(QWidget *parent)
: QWidget(parent)
{
this->setMaximumSize(1,1);//设置为最小
this->setWindowFlags(Qt::FramelessWindowHint);//窗口无边框化
}