当前位置: 首页> 财经> 访谈 > Linux中利用消息队列给两个程序切换显示到前台

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

时间:2025/7/12 2:11:20来源:https://blog.csdn.net/simple_core/article/details/140600631 浏览次数:0次

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

需求:

  • 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中利用消息队列给两个程序切换显示到前台

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: