網(wǎng)站美化福州外包seo公司
????????最近做一個小功能,需要后臺運行QT程序,無彈窗,并且只允許一個exe運行,不關(guān)閉程序,無法2次啟動。
main.cpp
#include "deleteshotcurveflie.h"
#include <QApplication>
#include <QSharedMemory>
#include <QMessageBox>int main(int argc, char *argv[])
{QApplication a(argc, argv);DeleteShotCurveFlie w;// 創(chuàng)建一個QSharedMemory對象來檢查是否已經(jīng)存在實例QSharedMemory sharedMemory("UniqueApplicationName");// 嘗試附加到共享內(nèi)存段if (!sharedMemory.attach()){// 如果無法附加,說明這是第一個實例sharedMemory.create(1); // 創(chuàng)建一個1字節(jié)的共享內(nèi)存段// 創(chuàng)建并顯示主窗口w.show();w.hide();// 開始事件循環(huán)int ret = a.exec();// 程序退出時釋放共享內(nèi)存sharedMemory.detach();return ret;}else{// 如果已經(jīng)附加到共享內(nèi)存,說明已經(jīng)有實例在運行QMessageBox::information(nullptr, "程序運行中", "該程序已經(jīng)在運行中,不能打開第二個窗口。");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);//設(shè)置為最小this->setWindowFlags(Qt::FramelessWindowHint);//窗口無邊框化
}