当前位置: 首页 > news >正文

Linux中利用消息队列给两个程序切换显示到前台

消息队列–两个进程间的通信

需求:

  • 1.在Linux系统中
  • 2.两个ui界面的程序切换,一个显示,另一个隐藏

.h

#ifndef PROGRAMWINDOWSWITCH2_H
#define PROGRAMWINDOWSWITCH2_H#include <QObject>
#include <QThread>
#include <QMainWindow>struct Message{long msgType;int msgText[2];
};class MessageQueueReceiver : public QThread
{Q_OBJECT
public:MessageQueueReceiver(int msgid,QObject *parent = nullptr,int type = 1):QThread(parent),msgid(msgid),curWindowType(type){}signals:void messageReceived(const int &message);protected:void run() override;private:int msgid;int curWindowType;
};class programwindowswitch2 : public QObject
{Q_OBJECT
public:enum WindowType{ConfigWindow = 1,ControlWindow = 2};explicit programwindowswitch2(QObject *parent = nullptr,WindowType type = ConfigWindow);signals:void showWindowSignal(void);void ChangedWindow(void);
public slots:void vSwitchOtherWindow(bool flag= true);private slots:void handleMessage(const int &message);private:int msgid;MessageQueueReceiver *m_receiver;QWidget *pMainWidget;WindowType curWindowType;
};#endif // PROGRAMWINDOWSWITCH2_H

.cpp

#include "programwindowswitch2.h"
#include <QMutex>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <iostream>#include <QDebug>programwindowswitch2::programwindowswitch2(QObject *parent,WindowType type) : QObject(parent),curWindowType(type)
{pMainWidget = static_cast<QMainWindow*>(parent);key_t key = ftok("myMessage",35);msgid = msgget(key,0666 | IPC_CREAT);m_receiver = new MessageQueueReceiver(msgid,this,curWindowType);connect(m_receiver,&MessageQueueReceiver::messageReceived,this,&programwindowswitch2::handleMessage);m_receiver->start();
}void MessageQueueReceiver::run()
{Message msg;while (true) {if(msgrcv(msgid,&msg,sizeof(msg),curWindowType,0) > 0){emit messageReceived(msg.msgText[0]);}}
}void programwindowswitch2::vSwitchOtherWindow(bool flag)
{Message msg;if(pMainWidget == nullptr)return;switch (curWindowType) {case ConfigWindow:msg.msgType = 2;msg.msgText[0] = flag;break;case ControlWindow:msg.msgType = 1;msg.msgText[0] = flag;break;default:return;break;}msgsnd(msgid,&msg,sizeof(msg),0);
}//show windows
void programwindowswitch2::handleMessage(const int &message)
{bool show_flag = false;if(pMainWidget == nullptr)return;switch (curWindowType) {case ConfigWindow:if(message == 1){show_flag = true;}break;case ControlWindow:if(message == 1){show_flag = true;}break;default:break;}if(show_flag){emit ChangedWindow();pMainWidget->show();vSwitchOtherWindow(false);}else {pMainWidget->hide();}
}

相关文章:

Linux中利用消息队列给两个程序切换显示到前台

消息队列–两个进程间的通信 需求&#xff1a; 1.在Linux系统中2.两个ui界面的程序切换&#xff0c;一个显示&#xff0c;另一个隐藏 .h #ifndef PROGRAMWINDOWSWITCH2_H #define PROGRAMWINDOWSWITCH2_H#include <QObject> #include <QThread> #include <Q…...

C语言实例-约瑟夫生者死者小游戏

问题&#xff1a; 30个人在一条船上&#xff0c;超载&#xff0c;需要15人下船。于是人们排成一队&#xff0c;排队的位置即为他们的编号。报数&#xff0c;从1开始&#xff0c;数到9的人下船&#xff0c;如此循环&#xff0c;直到船上仅剩15人为止&#xff0c;问都有哪些编号…...

算法类学习笔记 ———— 红绿灯检测

文章目录 介绍基于传统视觉方法的检测基于颜色和边缘信息基于背景抑制 基于深度学习的检测特征金字塔网络&#xff08;FPN&#xff09;红绿灯检测特征金字塔自下而上自上而下横向连接 特征融合SSD红绿灯检测 高精度地图结合 介绍 红绿灯检测就是获取红绿灯在图像中的坐标以及它…...

git命令使用详细介绍

1 环境配置 设置的信息会保存在~/.gitconfig文件中 查看配置信息 git config --list git config user.name设置用户信息 git config --global user.name "有勇气的牛排" git config --global user.email “1809296387qq.com”2 获取Git仓库 2.1 本地初始化一个仓…...

WebStorm中在Terminal终端运行脚本时报错无法加载文件进行数字签名。无法在当前系统上运行该脚本。有关运行脚本和设置执行策略的详细信息,请参阅

错误再现 我们今天要 在webstorm用终端运行脚本 目的是下一个openAPI的 前端请求代码生成的模块 我们首先从github上查看官方文档 我们根据文档修改 放到webstorm终端里执行 报错 openapi : 无法加载文件 C:\Users\ZDY\Desktop\多多oj\dduoj\node_modules\.bin\openapi.p…...

【Java题解】以二进制加法的方式来计算两个内容为二进制数字的字符串相加的结果

&#x1f389;欢迎大家收看&#xff0c;请多多支持&#x1f339; &#x1f970;关注小哇&#xff0c;和我一起成长&#x1f680;个人主页&#x1f680; &#x1f451;目录 分析&#xff1a;&#x1f680; 数字层面分析⭐ 字符串层面分析⭐ 代码及运行结果分析:&#x1f6…...

docker -v 到底和那个一样?type=volume还是type=bind的解释

逐行通俗详细的解释下这个代码“#!/usr/bin/env bash # # This script will automatically pull docker image from DockerHub, and start a daemon container to run the Qwen-Chat web-demo.IMAGE_NAMEqwenllm/qwen:2-cu121 QWEN_CHECKPOINT_PATH/path/to/Qwen-Instruct PORT…...

linux自动化构建工具--make/makefile

目录 1.make/makefile介绍 1.1基本认识 1.2依赖关系、依赖方法 1.3具体操作步骤 1.4进一步理解 1.5默认设置 1.6make二次使用的解释 1.7两个文件的时间问题 1.8总是被执行 1.9特殊符号介绍 1.make/makefile介绍 1.1基本认识 make是一个指令&#xff0c;makefile是一…...

学习记录——day15 数据结构 链表

链表的引入 顺序表的优缺点 1、优点:能够直接通过下标进行定位元素&#xff0c;访问效率高&#xff0c;对元素进行查找和修改比较快 2、不足:插入和删除元素需要移动大量的元素&#xff0c;效率较低 3、缺点:存储数据元素有上限&#xff0c;当达到MAX后&#xff0c;就不能再…...

vue3实现在新标签中打开指定的网址

有一个文件列表&#xff0c;如下图&#xff1a; 我希望点击查看按钮的时候&#xff0c;能够在新的标签页面打开这个文件的地址进行预览&#xff0c;该如何实现呢&#xff1f; 比如&#xff1a; 实际上要实现这个并不难&#xff0c;参考demo如下&#xff1a; 首先&#x…...

Qt基础 | QSqlTableModel 的使用

文章目录 一、QSqlTableModel 的使用1.主窗口MainWindow类定义2.构造函数3.打开数据表3.1 添加 SQLite 数据库驱动、设置数据库名称、打开数据库3.2 数据模型设置、选择模型、自定义代理组件、界面组件与模型数据字段间的数据映射 4.添加、插入与删除记录5.保存与取消修改6.设置…...

RPA软件-影刀使用

流程自动化 影刀将操作进行抽象&#xff0c;分为一下几个对象&#xff1a; 网页自动化 &#xff08;1&#xff09; 网页自动化应用场景&#xff1a;网页操作、数据抓取 &#xff08;2&#xff09; 网页操作&#xff1a;基础操作-指令操作&#xff0c;智能操作-关联元素&#…...

HarmonyOS NEXT零基础入门到实战-第四部分

自定义组件: 概念: 由框架直接提供的称为 系统组件&#xff0c; 由开发者定义的称为 自定义组件。 源代码&#xff1a; Component struct MyCom { build() { Column() { Text(我是一个自定义组件) } } } Component struct MyHeader { build() { Row(…...

vue2获取视频时长

使用HTML5的video标签和JavaScript&#xff1a; <template><video ref"video" autoplay controls loop muted loadedmetadata"getVideoDuration"><source src"https://desktop-yikao.oss-cn-beijing.aliyuncs.com/avatar/kaissp.mp4&q…...

Linux中进程的控制

一、进程的创建 1、知识储备 进程的创建要调用系统接口&#xff0c;头文件 #include<unistd.h> 函数fork() 由于之前的铺垫我们现在可以更新一个概念 进程 内核数据结构&#xff08;task_struct, mm_struct, 页表....&#xff09; 代码 数据 所以如何理解进程的独…...

【源码】Sharding-JDBC源码分析之JDBC

Sharding-JDBC系列 1、Sharding-JDBC分库分表的基本使用 2、Sharding-JDBC分库分表之SpringBoot分片策略 3、Sharding-JDBC分库分表之SpringBoot主从配置 4、SpringBoot集成Sharding-JDBC-5.3.0分库分表 5、SpringBoot集成Sharding-JDBC-5.3.0实现按月动态建表分表 6、【…...

Java | Leetcode Java题解之第273题整数转换英文表示

题目&#xff1a; 题解&#xff1a; class Solution {String[] singles {"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"};String[] t…...

数据结构之深入理解简单选择排序:原理、实现与示例(C,C++)

文章目录 一、简单选择排序原理二、C/C代码实现总结&#xff1a; 在计算机科学中&#xff0c;排序算法是一种非常基础且重要的算法。简单选择排序&#xff08;Selection Sort&#xff09;作为其中的一种&#xff0c;因其实现简单、易于理解而受到许多初学者的喜爱。本文将详细介…...

使用vscode搜索打开的文件夹下的文件

右键空白处打开命令面板 摁一次删除键&#xff0c;删除掉图中的大于号 这样就能够找到例化的模块&#xff0c;文件具体在哪个位置&#xff0c;然后打开了...

力扣778.水位上升的泳池中游泳

力扣778.水位上升的泳池中游泳 二分 bfs class Solution {int dx[4] {1,0,-1,0},dy[4] {0,1,0,-1};public:int swimInWater(vector<vector<int>>& grid) {int n grid.size();auto check [&](int mid) -> bool{queue<pair<int,int>>…...

Sigma-Delta ADC中的Sinc3滤波器:资源优化与面积权衡实战分析

Sigma-Delta ADC中的Sinc3滤波器&#xff1a;资源优化与面积权衡实战分析 在物联网芯片设计中&#xff0c;面积和功耗往往是工程师们最关心的两个指标。当我们需要为一个22位精度的Sigma-Delta ADC集成Sinc3滤波器时&#xff0c;如何在保证性能的前提下最大限度地优化硬件资源&…...

毫米波雷达测速的“火眼金睛”:从汽车ACC到手势识别,Doppler FFT如何分辨不同速度的目标?

毫米波雷达测速的“火眼金睛”&#xff1a;从汽车ACC到手势识别&#xff0c;Doppler FFT如何分辨不同速度的目标&#xff1f; 在自动驾驶汽车的前方&#xff0c;一辆卡车突然减速&#xff0c;而右侧车道有摩托车正在加速超车——毫米波雷达如何在这复杂的场景中&#xff0c;准确…...

TranslucentTB终极配置指南:轻松打造个性化Windows任务栏透明效果

TranslucentTB终极配置指南&#xff1a;轻松打造个性化Windows任务栏透明效果 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB Translucen…...

STM32HAL库项目实战:我把W5500和MQTTClient库‘缝’起来,实现了阿里云OTA升级前传

STM32HAL库与W5500深度整合&#xff1a;从MQTT云连接到OTA升级的工程实践 在嵌入式设备智能化浪潮中&#xff0c;远程固件升级(OTA)已成为工业设备的标配功能。本文将揭示如何基于STM32HAL库和W5500以太网芯片构建可靠的云连接通道&#xff0c;为后续OTA升级打下坚实基础。不同…...

OpenClaw安全配置要点:Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF本地运行权限管理

OpenClaw安全配置要点&#xff1a;Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF本地运行权限管理 1. 为什么需要特别关注OpenClaw的安全配置&#xff1f; 第一次在本地部署OpenClaw时&#xff0c;我犯了一个新手常见的错误——直接使用默认配置启动服务。结果第二天…...

OpenClaw任务编排:用Qwen3.5-4B-Claude实现爬虫+分析闭环

OpenClaw任务编排&#xff1a;用Qwen3.5-4B-Claude实现爬虫分析闭环 1. 为什么需要自动化任务编排 去年我接手了一个市场调研项目&#xff0c;需要每周从20多个网站抓取产品价格数据&#xff0c;清洗后生成趋势图表。最初用Python脚本手动Excel处理&#xff0c;每次要花3小时…...

开局掌控者:EdB Prepare Carefully - RimWorld自定义体验革命

开局掌控者&#xff1a;EdB Prepare Carefully - RimWorld自定义体验革命 【免费下载链接】EdBPrepareCarefully EdB Prepare Carefully, a RimWorld mod 项目地址: https://gitcode.com/gh_mirrors/ed/EdBPrepareCarefully 副标题&#xff1a;如何告别随机开局&#xf…...

all-MiniLM-L6-v2保姆级教程:Ollama模型卸载、版本回滚与缓存清理指南

all-MiniLM-L6-v2保姆级教程&#xff1a;Ollama模型卸载、版本回滚与缓存清理指南 1. 为什么需要管理你的Ollama模型&#xff1f; 你可能已经用Ollama成功部署了all-MiniLM-L6-v2&#xff0c;体验了它轻量高效的句子嵌入能力。但用久了你会发现&#xff0c;硬盘空间在悄悄减少&…...

告别性能瓶颈:如何用NVIDIA Profile Inspector释放显卡90%潜能?

告别性能瓶颈&#xff1a;如何用NVIDIA Profile Inspector释放显卡90%潜能&#xff1f; 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 为什么官方显卡控制面板永远像个"锁着的工具箱"&#…...

CI/CD 流水线性能优化:从构建到部署

CI/CD 流水线性能优化&#xff1a;从构建到部署 前言 哥们&#xff0c;别整那些花里胡哨的理论。今天直接上硬菜——我在大厂一线优化 CI/CD 流水线性能的真实经验总结。作为一个白天写前端、晚上打鼓的硬核工程师&#xff0c;我对效率的追求就像对鼓点节奏的把控一样严格。 背…...