关键词:QT程序重复启动检查
使用场景:不建议程序被多次启动的情况:例如程序启动后连接了某些设备,而操作用户没注意到程序已经启动了,又打开了一次程序,然后出现连接被占用等问题。
代码实现:
可以在QT项目的main.cpp中实现
#include <QApplication> #include <QSharedMemory> #include <QMessageBox> #include <QWidget> bool checkSingleInstance() { static QSharedMemory sharedMemory; // 设置唯一的key sharedMemory.setKey("MyAppSingleInstanceKey"); if (sharedMemory.attach()) { // 已经附加到现有内存,说明已有实例运行 return false; } // 创建共享内存段 if (!sharedMemory.create(1)) { QMessageBox::critical(nullptr, "错误", "无法创建共享内存段,可能是权限问题。"); return false; } // 确保程序退出时释放共享内存 QObject::connect(qApp, &QCoreApplication::aboutToQuit, []() { QSharedMemory().setKey("MyAppSingleInstanceKey"); }); return true; } int main(int argc, char *argv[]) { QApplication app(argc, argv); //插入检查函数 if (!checkSingleInstance()) { QMessageBox::warning(nullptr, "警告", "程序已经在运行中!"); return 0; } // 正常启动程序 QWidget window; window.show(); return app.exec(); }