# industrial-control-qml-grpc **Repository Path**: walkeringDo/industrial-control-qml-grpc ## Basic Information - **Project Name**: industrial-control-qml-grpc - **Description**: 工业设备远程控制 + 实时状态监控 场景,使用 gRPC 构建。基于 CMake + gRPC + Protobuf + qt (qml) 的控制框架结构 - **Primary Language**: C++ - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-13 - **Last Updated**: 2025-11-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 工业控制 QML gRPC 项目 这是一个基于 Qt6、gRPC 和 CMake 构建的工业控制桌面应用原型,支持 QML 前端界面与 C++ 后端逻辑集成,并通过 gRPC 实现服务通信能力。适用于需要跨平台 GUI 与远程过程调用结合的工业控制系统开发。 ## 功能特点 - 使用 QML 构建现代化图形用户界面 - C++ 后端处理业务逻辑并通过 `AppCore` 暴露给 QML - 支持 gRPC 客户端和服务端双模式运行 - 自动生成 Protobuf 和 gRPC 绑定代码 - 多入口设计:统一界面、独立客户端、独立服务端三种运行模式 - 支持设备控制模拟:相机、LED、运动平台等 ## 先决条件 1. Qt 6.9.1 安装在 `D:/QT6/6.9.1/msvc2022_64` 2. Vcpkg 安装在 `D:/vcpkg/` 3. Visual Studio Code 4. CMake 3.16 或更高版本 5. Ninja 构建工具(可选) 6. Visual Studio 2022 或其他 C++ 编译器 ## 项目结构 - `src/`: C++ 源代码 - `AppCore.*`: 核心业务逻辑,连接 QML 和 gRPC - `IndustrialControlClient.*`: gRPC 客户端实现 - `IndustrialControlServer.*`: gRPC 服务端实现 - `IndustrialControlServiceImpl.*`: gRPC 服务实现 - `main.cpp`: 主程序入口,支持三种运行模式 - `client_main.cpp`: 客户端模式入口 - `server_main.cpp`: 服务端模式入口 - `qml/`: QML 界面文件 - `main.qml`: 默认模式入口 - `MainView.qml`: 统一界面视图(服务端/客户端切换) - `ServerMain.qml`: 服务端模式入口 - `ServerView.qml`: 服务端控制界面 - `ClientMain.qml`: 客户端模式入口 - `ClientView.qml`: 客户端控制界面 - `industrial_control.proto`: gRPC 服务定义文件 - `CMakeLists.txt`: CMake 配置文件 - `CMakePresets.json`: CMake 预设配置 - `qml.qrc`: Qt 资源文件 - `vcpkg.json`: vcpkg 依赖配置 ## 运行模式 项目支持三种运行模式,通过命令行参数切换: ### 1. 默认 GUI 模式(推荐) 运行统一界面,可通过标签页在服务端和客户端功能间切换: ```bash QmlCMakeProject.exe ``` ### 2. 独立服务端模式 运行 gRPC 服务端,提供工业控制服务: ```bash QmlCMakeProject.exe --server # 或 industrial_control_server.exe ``` ### 3. 独立客户端模式 运行 gRPC 客户端,连接服务端并控制设备: ```bash QmlCMakeProject.exe --client # 或 industrial_control_client.exe ``` ## 配置项目 有几种方式可以配置项目: ### 方法1:使用 VSCode(推荐) 1. 打开 VSCode 并加载此项目文件夹 2. 安装推荐的扩展: - C/C++ Extension Pack - CMake Tools 3. VSCode 应该会自动检测到 CMake 项目并提示配置 4. 选择以下预设之一: - `x64-debug` - 使用 Visual Studio 生成器的 64 位调试配置 - `x64-release` - 使用 Visual Studio 生成器的 64 位发布配置 - `ninja-x64-debug` - 使用 Ninja 生成器的 64 位调试配置 - `ninja-x64-release` - 使用 Ninja 生成器的 64 位发布配置 注意:如果遇到架构冲突错误,请先删除 `build` 目录再重新配置。 ### 方法3:手动使用命令行 ```bash # 清理旧的构建目录(如有必要) rm -rf build # 配置项目 mkdir build cd build cmake .. -G "Visual Studio 17 2022" -A x64 ``` ## 解决常见问题 ### Qt 架构不匹配错误 如果您遇到类似以下的错误: ``` Could not find a configuration file for package "Qt6" that is compatible with requested version "" The following configuration files were considered but not accepted: D:/QT6/6.9.1/msvc2022_64/lib/cmake/Qt6/Qt6Config.cmake, version: 6.9.1 (64bit) ``` 这通常是因为 CMake 尝试为 32 位架构配置项目,而 Qt 安装的是 64 位版本。要解决这个问题,请确保: 1. 使用 `x64` 架构而不是 `win32` 2. 在 VSCode 中选择正确的预设配置(如 `x64-debug`) 3. 如果手动运行 cmake 命令,请使用 `-A x64` 参数而不是 `-A win32` 4. 删除旧的 `build` 目录以清除缓存冲突 ### VSCode 架构冲突 如果 VSCode 显示如下错误: ``` generator platform: win32 Does not match the platform used previously: x64 ``` 请删除 `build` 目录并重新配置: ```powershell # PowerShell Remove-Item -Recurse -Force build ``` 然后重新配置项目。 ### QML 文件找不到错误 如果运行时出现类似以下错误: ``` QQmlApplicationEngine failed to load component qrc:/main.qml: 此文件或目录不存在 ``` 这表示 QML 资源文件没有正确编译或链接。确保: 1. [qml.qrc](file:///e:/Projects/CPPProjects/industrial-control-qml-grpc/qml.qrc) 文件正确引用了 QML 文件 2. [main.cpp](file:///e:/Projects/CPPProjects/industrial-control-qml-grpc/src/main.cpp) 中使用的资源路径与 [qml.qrc](file:///e:/Projects/CPPProjects/industrial-control-qml-grpc/qml.qrc) 中定义的路径一致 3. 重新构建项目以确保资源文件被正确编译 ## 构建项目 ### 使用 VSCode 使用 VSCode 状态栏中的 "Build" 按钮,或按 `Ctrl+Shift+P` 并选择 "CMake: Build"。 ### 使用命令行 ```bash # 如果已配置项目 cmake --build build --config Release # 或者一次性配置和构建 mkdir build cd build cmake .. -G "Visual Studio 17 2022" -A x64 cmake --build . --config Release ``` ## 运行项目 ### 使用 VSCode 在 VSCode 中按 `F5` 开始调试 ### 使用命令行 ```bash # Visual Studio 生成器 build\Release\QmlCMakeProject.exe # Ninja 生成器 build\QmlCMakeProject.exe ``` ## QML 与 C++ 交互 项目采用标准的 Qt QML-C++ 交互模式: 1. 通过 `QQmlApplicationEngine::rootContext()->setContextProperty()` 将 C++ 对象注册为 QML 全局属性 2. 使用 `Q_PROPERTY` 宏暴露可被 QML 访问的属性 3. `public slots` 中的方法自动暴露给 QML 调用 4. C++ signals 可在 QML 中监听和响应 核心交互对象是 `AppCore` 类,它作为业务逻辑中枢连接 QML 界面和 gRPC 通信层。