Qt单一应用实例判断
原本项目中使用QSharedMemory的方法来判断当前是否已存在运行的实例,但在MacOS上,当程序异常崩溃后,QSharedMemory没有被正常销毁,导致应用程序无法再次被打开。
对此,Qt assistant中有相关说明:

摘抄 qt-solutions/qtsingleapplication at master · qtproject/qt-solutions (github.com) 实现了一个single application的类,记录下来:
main.cpp
#include "mainwindow.h"
#include "singleapplication.h"int main(int argc, char *argv[])
{CSingleApplication a(argc, argv);if (a.isRunning()) {return 0;}MainWindow w;w.show();a.setActivationWindow(&w);return a.exec();
}
singleapplication.cpp
#include "singleapplication.h"
#include <QFileInfo>
#include <QLocalSocket>
#include <QLocalServer>
#include <QWidget>CSingleApplication::CSingleApplication(int& argc, char** argv): QApplication(argc, argv)
{m_strServerName = QFileInfo(QCoreApplication::applicationFilePath()).fileName();initLocalConn();
}CSingleApplication::~CSingleApplication()
{}bool CSingleApplication::isRunning()
{return m_isRunning;
}void CSingleApplication::setActivationWindow(QWidget* w)
{m_pActivateWin = w;
}void CSingleApplication::initLocalConn()
{m_isRunning = false;QLocalSocket socket;socket.connectToServer(m_strServerName);if (socket.waitForConnected(200)) {m_isRunning = true;return;}createLocalServer();
}void CSingleApplication::createLocalServer()
{m_pLocalServer = new QLocalServer(this);connect(m_pLocalServer, &QLocalServer::newConnection, this, &CSingleApplication::onNewConnection);if (!m_pLocalServer->listen(m_strServerName)) {if (QAbstractSocket::AddressInUseError == m_pLocalServer->serverError()) {QLocalServer::removeServer(m_strServerName);m_pLocalServer->listen(m_strServerName);}}
}void CSingleApplication::activateWindow()
{if (nullptr != m_pActivateWin) {m_pActivateWin->show();m_pActivateWin->raise();m_pActivateWin->activateWindow();}
}void CSingleApplication::onNewConnection()
{if (nullptr == m_pLocalServer) {return;}QLocalSocket* socket = m_pLocalServer->nextPendingConnection();if (nullptr != socket) {socket->waitForReadyRead(300);delete socket;activateWindow();}
}
singleapplication.h
#ifndef CSINGLEAPPLICATION_H
#define CSINGLEAPPLICATION_H#include <QApplication>class QLocalServer;class CSingleApplication : public QApplication
{
public:CSingleApplication(int& argc, char** argv);virtual ~CSingleApplication() override;public:bool isRunning();void setActivationWindow(QWidget* w);private:bool m_isRunning = false;QWidget* m_pActivateWin = nullptr;QString m_strServerName;QLocalServer* m_pLocalServer = nullptr;void initLocalConn();void createLocalServer();void activateWindow();private slots:void onNewConnection();
};#endif // CSINGLEAPPLICATION_H
相关文章:
Qt单一应用实例判断
原本项目中使用QSharedMemory的方法来判断当前是否已存在运行的实例,但在MacOS上,当程序异常崩溃后,QSharedMemory没有被正常销毁,导致应用程序无法再次被打开。 对此,Qt assistant中有相关说明: 摘抄 qt-s…...
企业AI工程化之路:如何实现高效、低成本、高质量的落地?
MLOps工程实践 概述面临挑战目的内容简介读者对象专家推荐目录 写在末尾: 主页传送门:📀 传送 概述 作为计算机科学的一个重要领域,机器学习也是目前人工智能领域非常活跃的分支之一。机器学习通过分析海量数据、总结规律&#x…...
最短路径专题8 交通枢纽 (Floyd求最短路 )
题目: 样例: 输入 4 5 2 0 1 1 0 2 5 0 3 3 1 2 2 2 3 4 0 2 输出 0 7 思路: 由题意,绘制了该城市的地图之后,由给出的 k 个编号作为起点,求该点到各个点之间的最短距离之和最小的点是哪个,并…...
文件扫描模块
文章目录 前言文件扫描模块设计初级扫描方案一实现单线程扫描整合扫描步骤 设计初级扫描方案二周期性扫描 总结 前言 我们这个模块考虑的是数据库里面的内容从哪里获取。 获取完成后,这时候,我们就需要把目录里面文件/子文件都获取出来,并存入数据库。 文件扫描模…...
MySQL之主从复制
概述: 将主库的数据 变更同步到从库,从而保证主库和从库数据一致。 它的作用是 数据备份,失败迁移,读写分离,降低单库读写压力 原理: 主服务器上面的任何修改都会保存在二进制日志( Bin-log日志…...
[leetcode 单调栈] 901. 股票价格跨度 M
设计一个算法收集某些股票的每日报价,并返回该股票当日价格的 跨度 。 当日股票价格的 跨度 被定义为股票价格小于或等于今天价格的最大连续日数(从今天开始往回数,包括今天)。 例如,如果未来 7 天股票的价格是 [100…...
Java线程池:并发编程的利器
Java线程池:并发编程的利器 在多任务、高并发的时代,Java并发编程显得尤为重要。其中,Java线程池是一种高效的管理线程的工具,能够提高应用程序的性能和响应速度。本文将深入探讨Java线程池的工作原理、应用场景以及简单示例&…...
ARM硬件断点
hw_breakpoint 是由处理器提供专门断点寄存器来保存一个地址,是需要处理器支持的。处理器在执行过程中会不断去匹配,当匹配上后则会产生中断。 内核自带了硬件断点的样例linux-3.16\samples\hw_breakpoint\data_breakpoint.c static void sample_hbp_h…...
Java使用WebSocket(基础)
准备一个html页面 <!DOCTYPE HTML> <html> <head><meta charset"UTF-8"><title>WebSocket Demo</title> </head> <body><input id"text" type"text" /><button onclick"send()&…...
图像处理与计算机视觉--第五章-图像分割-自适应阈值分割
文章目录 1.自适应阈值分割介绍2.自适应阈值函数参数解析3.高斯概率函数介绍4.自适应阈值分割核心代码5.自适应阈值分割效果展示6.参考文章及致谢 1.自适应阈值分割介绍 在图片处理过程中,针对铺前进行二值化等操作的时候,我们希望能够将图片相应区域内所…...
记一次问题排查
1785年,卡文迪许在实验中发现,把不含水蒸气、二氧化碳的空气除去氧气和氮气后,仍有很少量的残余气体存在。这种现象在当时并没有引起化学家的重视。 一百多年后,英国物理学家瑞利测定氮气的密度时,发现从空气里分离出来…...
【Spring Boot】创建一个 Spring Boot 项目
创建一个 Spring Boot 项目 1. 安装插件2. 创建 Spring Boot 项目3. 项目目录介绍和运行注意事项 1. 安装插件 IDEA 中安装 Spring Boot Helper / Spring Assistant / Spring Initializr and Assistant插件才能创建 Spring Boot 项⽬ (有时候不用安装,直…...
flutter中使用缓存
前言 在flutter项目中使用ListView或者PageView等有滚动条组件的时候,切换页面的时候,再切换回来会丢失之前的滑动状态,这个时候就需要需要使用缓存功能 缓存类 import package:flutter/material.dart;class KeepAliveWrapper extends Sta…...
京东数据分析平台:9月中上旬白酒消费市场数据分析
9月份,围绕白酒的热点不断。9月5日,瑞幸咖啡官微发布消息称,瑞幸与贵州茅台跨界合作推出的酱香拿铁刷新单品纪录,首日销量突破542万杯,销售额破1亿元。9月14日,贵州茅台官微发布消息称与德芙推出联名产品“…...
Linux安装 spark 教程详解
目录 一 准备安装包 二 安装 scala 三 修改配置文件 1)修改 workers 文件 2)修改 spark-env.sh文件 四 进入 spark 交互式平台 一 准备安装包 可以自行去 spark 官网下载想要的版本 这里准备了 spark3.1.2的网盘资源 链接: https://pan.baidu.com…...
动态内存管理函数(malloc,calloc,realloc,free)
动态内存函数 1.1malloc和free C语言提供了一个动态内存开辟的函数: void* malloc (size_t size); 这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针。 如果开辟成功,则返回一个指向开辟好空间的指针。如果开辟失败&#…...
云表|都有生产管理模块,MES和ERP有什么不同,该如何选择
MES和ERP是生产制造领域的两大知名系统,虽然早已声名鹊起,但仍有不少人难以明确区分两者的差异。下面将详细阐述这两个系统的不同之处。首先,要了解MES和ERP的定义。 MES系统:全称制造执行系统(Manufacturing Executio…...
C语言 - 数组
目录 1. 一维数组的创建和初始化 1.1 数组的创建 1.2 数组的初始化 1.3 一维数组的使用 1.4 一维数组在内存中的存储 2. 二维数组的创建和初始化 2.1 二维数组的创建 2.2 二维数组的初始化 2.3 二维数组的使用 2.4 二维数组在内存中的存储 3. 数组越界 4. 数组作为函数参数 4.1…...
Vue 中的插槽(Slot),有什么用,不同插槽的区别?
Vue 中的插槽(Slot案例详解) 是一种非常有用的功能,用于组件之间的内容分发和复用。以下是关于插槽的一些重要概念: 插槽的作用: 插槽允许你将组件的内容分发到其子组件中,以实现灵活的组件复用和自定义布局。通过插槽…...
Linux登录自动执行脚本
一、所有用户每次登录时自动执行。 1、在/etc/profile文件末尾添加。 将启动命令添加到/etc/profile文件末尾。 2、在/etc/profile.d/目录下添加sh脚本。 在/etc/profile.d/目录下新建sh脚本,设置每次登录自动执行脚本。有用户登录时,/etc/profile会遍…...
一键部署体验:圣女司幼幽-造相Z-Turbo文生图模型效果实测
一键部署体验:圣女司幼幽-造相Z-Turbo文生图模型效果实测 1. 模型简介与部署准备 圣女司幼幽-造相Z-Turbo是一款基于Z-Image-Turbo模型的LoRA微调版本,专门用于生成《牧神记》中角色"圣女司幼幽"的高质量图像。该模型通过Xinference框架部署…...
【Spring 面试突击 · 03】大厂高频面试题:从IoC容器底层原理到Spring Boot自动配置解析
目录 一、Spring Boot如何启动Tomcat? 二、Spring Boot配置文件加载顺序 三、MyBatis的优缺点 四、Hibernate与MyBatis的区别 五、Spring Context模块的理解 六、什么是Spring依赖注入? 七、什么是Spring Bean? 八、Spring AOP与Aspec…...
OpenClaw网关配置详解:Qwen3-32B镜像的端口与安全设置
OpenClaw网关配置详解:Qwen3-32B镜像的端口与安全设置 1. 为什么需要关注网关配置? 上周我在本地部署Qwen3-32B模型时,遇到了一个尴尬的问题:凌晨3点被安全团队电话叫醒,原因是OpenClaw的测试端口被扫描到异常流量。…...
AI显微镜-Swin2SR惊艳效果展示:电子包浆表情包高清还原作品集
AI显微镜-Swin2SR惊艳效果展示:电子包浆表情包高清还原作品集 你有没有遇到过这种情况?在网上看到一个特别有趣的表情包,但图片糊得连五官都看不清,上面还叠加了无数层水印和压缩痕迹,俗称“电子包浆”。想保存下来当…...
如何在Python中处理大型数据集
在数据爆炸的今天,我们常常要面对动辄几十GB甚至上百GB的大型数据集。用常规Python方法处理时,内存溢出、运行缓慢的问题屡见不鲜。本文将从内存优化、高效计算、并行处理三个核心方向,分享实用的处理技巧,帮你轻松搞定大数据。&a…...
从CTF题到实战:手把手教你用Python的sympy和gmpy2破解RSA变种(附完整脚本)
从CTF题到实战:手把手教你用Python的sympy和gmpy2破解RSA变种(附完整脚本) 在网络安全竞赛和实际渗透测试中,RSA加密算法的各种变种经常出现。这些变种往往通过引入特殊的数学性质或构造方式,使得标准的RSA攻击方法失效…...
解锁AI原生应用领域多代理系统的潜力
解锁AI原生应用领域多代理系统的潜力 关键词:多代理系统(MAS)、AI原生应用、智能体(Agent)、协作式AI、涌现行为 摘要:在AI从“工具辅助”向“原生驱动”进化的今天,多代理系统(Multi-Agent System, MAS)正成为构建复杂智能应用的核心引擎。本文将通过生活类比、技术原…...
2026年企业AI HR选型实用手册
导读:这份2026年企业AI HR选型实用手册由eRoad易路出品,核心围绕AI技术与人力资源管理的深度融合,提出以“搭子”方法论打造企业落地AI HR的最短路径,展现了从技术应用到产业落地的HR智能化进化方向。关注公众号:【互联…...
3步搞定专业电路图绘制:Draw.io ECE插件让电子工程设计变得简单高效
3步搞定专业电路图绘制:Draw.io ECE插件让电子工程设计变得简单高效 【免费下载链接】Draw-io-ECE Custom-made draw.io-shapes - in the form of an importable library - for drawing circuits and conceptual drawings in draw.io. 项目地址: https://gitcode.…...
别再手动装依赖了!ROS 2 Humble/Foxy下用rosdep一键搞定工作空间所有包的依赖安装
别再手动装依赖了!ROS 2 Humble/Foxy下用rosdep一键搞定工作空间所有包的依赖安装 "又报错了?缺少libxxx-dev?"——这可能是ROS 2开发者最常遇到的崩溃瞬间。当你在深夜赶项目,colcon build却因为缺失依赖而中断时&…...
