QLocalServer + QLocalSocket+QProcess

目录

整体架构说明

公共文件 MsgStruct.h(两个项目都要有)

工程一:MainApp(主程序,QLocalServer + QProcess)

MainApp.pro

MainApp.h

MainApp.cpp

main.cpp(主程序入口)

工程二:SubProcess(子程序,QLocalSocket 客户端)

SubProcess.pro

SubClient.h

SubClient.cpp

main.cpp(子程序入口)

使用步骤

关键说明


整体架构说明

主程序 = QLocalServer(IPC 服务端) + QProcess(启动子进程)子进程 = QLocalSocket(IPC 客户端)流程:

  1. 主程序启动,创建 QLocalServer 监听本地管道;
  2. 主程序通过 QProcess 拉起子进程 exe;
  3. 子进程内部初始化 QLocalSocket,连接主程序本地服务;
  4. 主、子进程通过本地套接字双向收发自定义结构体消息;
  5. 主程序监听 QProcess 信号,感知子进程崩溃 / 退出。

下面给两套完整工程,包含 .pro、全部头文件、cpp,分为:

  1. MainApp(主程序:QLocalServer + QProcess)
  2. SubProcess(子程序:QLocalSocket 客户端)共用 MsgStruct.h,两个项目都复制一份。

公共文件 MsgStruct.h(两个项目都要有)

cpp

运行

#ifndef MSGSTRUCT_H #define MSGSTRUCT_H #include <QString> #include <QDataStream> struct Msg { int cmd; QString text; }; QDataStream& operator<<(QDataStream& ds, const Msg& m) { ds << m.cmd << m.text; return ds; } QDataStream& operator>>(QDataStream& ds, Msg& m) { ds >> m.cmd >> m.text; return ds; } #define SOCKET_NAME "MainAppLocalIPC" #endif

工程一:MainApp(主程序,QLocalServer + QProcess)

MainApp.pro

pro

QT += core QT -= gui CONFIG += c++11 console CONFIG -= app_bundle DEFINES += QT_DEPRECATED_WARNINGS SOURCES += \ main.cpp \ MainApp.cpp HEADERS += \ MainApp.h \ MsgStruct.h

MainApp.h

cpp

运行

#ifndef MAINAPP_H #define MAINAPP_H #include <QObject> #include <QLocalServer> #include <QLocalSocket> #include <QProcess> #include "MsgStruct.h" class MainApp : public QObject { Q_OBJECT public: explicit MainApp(QObject *p = nullptr); void startServer(); void launchSubProcess(const QString& subExePath); void sendAllClientMsg(const Msg& msg); private: QLocalServer* m_localServer; QProcess* m_subProcess; private slots: void onNewClient(); void onSocketReadyRead(); void onClientDisconnect(); void onProcStarted(); void onProcStd