最近做一个小功能,需要后台运行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);//窗口无边框化
}