目录
整体架构说明
公共文件 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 客户端)流程:
- 主程序启动,创建
QLocalServer监听本地管道; - 主程序通过
QProcess拉起子进程 exe; - 子进程内部初始化
QLocalSocket,连接主程序本地服务; - 主、子进程通过本地套接字双向收发自定义结构体消息;
- 主程序监听 QProcess 信号,感知子进程崩溃 / 退出。
下面给两套完整工程,包含 .pro、全部头文件、cpp,分为:
- MainApp(主程序:QLocalServer + QProcess)
- 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.hMainApp.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