Qt Node Editor. Dataflow programming framework
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 1 个月前 | ||
| 6 个月前 | ||
| 3 年前 | ||
| 6 个月前 | ||
| 5 个月前 | ||
| 3 年前 | ||
| 3 个月前 | ||
| 5 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 3 年前 | ||
| 9 年前 | ||
| 11 个月前 | ||
| 1 年前 | ||
| 5 个月前 | ||
| 3 年前 | ||
| 6 个月前 |
QtNodes #######
.. image:: https://github.com/paceholder/nodeeditor/actions/workflows/cmake_build.yml/badge.svg :target: https://github.com/paceholder/nodeeditor/actions/workflows/cmake_build.yml
简介
QtNodes 是一个基于 Qt 的通用库,旨在为各类应用开发节点编辑器。该库可用于简单的图形可视化与编辑,也可进一步扩展以支持 数据流范式 。
该库采用模型-视图(Model-View)架构。整个图形结构由一个继承自 AbstractGraphModel 的类定义。通过此类可以创建或添加节点和连接。其底层数据结构可以是任何任意类型或表示形式。
AbstractGraphModel 的实例可以选择是否附加到专门的 QGraphicsScene 和 QGraphicsView 对象上。也就是说,支持所谓的“无头”(headless)操作模式(modus operandi)。
文档
警告
版本 3.0 中对许多类进行了更改。如果您的大型项目是基于 2.x.x 版本开发的,请务必先阅读文档并查看示例,然后再检出新版本代码。
分支
v2 和 v3 分支分别对应 2.x.x 和 3.x 版本。master 分支包含最新的开发状态。
.. contents:: 导航 :depth: 2
数据流范式
扩展模型类 DataFlowGraphModel 允许注册以节点为代表的“处理算法”,并配备了一组 Qt 的信号和槽,用于在节点间传播数据。
节点的算法在有新的输入数据到达时触发。计算结果会传播到输出连接。每个新连接会获取可用数据并进一步传播。源节点中的任何变化都会立即通过所有连接传播,从而更新整个图形。
支持的环境
平台
- Linux (x64, gcc, Qt 5.15.2) |ImageLink|
- OSX (Apple Clang, Qt 5.15.2) |ImageLink|
- Windows (MSVC, Qt 5.15.2) |ImageLink|
- Windows (MSVC, Qt 6.3.0) |ImageLink|
.. |ImageLink| image:: https://github.com/paceholder/nodeeditor/actions/workflows/cmake_build.yml/badge.svg :target: https://github.com/paceholder/nodeeditor/actions/workflows/cmake_build.yml
依赖项
- Qt >5.15
- CMake 3.11
- Catch2
当前状态 (v3)
- 基于模型的图形
- 无头模式
您可以创建、填充、修改
AbstractGraphModel的派生类,而无需将其添加到实际的流程图场景中。该库现在被设计为通用的图形可视化和修改工具,不再仅专注于数据传播。 - 构建在图形模型代码之上的自动数据传播 该库既可以用于纯图形可视化目的,也可以用于最初实现的数据传播功能。
- 动态端口
- 数据类型感知连接
- 嵌入式 Qt 部件
- 一出多入连接
- 基于 JSON 的界面样式
- 将场景保存为 JSON 文件
- 自定义节点几何形状
- 垂直和水平图形布局
- 撤销/重做、复制 (CTRL+D)
构建
如果您希望使用 Qt5 版本而非 Qt6 进行构建,请将此选项设置为 false:
::
USE_QT6
mkdir build && cd build && cmake .. -DUSE_QT6=on 或者 mkdir build && cd build && cmake .. -DUSE_QT6=off
要构建静态库,请使用:
::
cmake .. -DBUILD_SHARED_LIBS=off
Linux
::
git clone git@github.com:paceholder/nodeeditor.git cd nodeeditor mkdir build cd build cmake .. make -j && make install
Qt Creator
- 打开
CMakeLists.txt作为项目。 构建 -> 运行 CMake构建 -> 全部构建- 点击
运行按钮
.. note::
该项目包含使用 Catch2 构建的单元测试。如果您没有安装 Catch2,可以通过在 CMake 配置中设置 -DBUILD_TESTING=OFF 来禁用测试。
使用 vcpkg 与 Cmake
^^^^^^^^^^^^^^^^^^^^^^^^
- 安装
vcpkg - 在
CMake的配置步骤中添加以下标志
::
-DCMAKE_TOOLCHAIN_FILE=<vcpkg_dir>/scripts/buildsystems/scripts/buildsystems/vcpkg.cmake
测试
QtNodes 包含一个使用 Catch2 构建的全面单元测试套件。
运行测试
从构建目录执行:
::
构建测试
make test_nodes
# 运行所有测试
./bin/test_nodes
# 运行特定类别
./bin/test_nodes "[core]" # 核心功能测试
./bin/test_nodes "[graphics]" # 图形系统测试
测试覆盖范围
- 核心模型操作(节点 CRUD、连接)
- 信号发射验证(AbstractGraphModel 信号)
- 序列化(JSON 保存/加载)
- 撤销系统集成
- 图形场景管理
- 连接工具
有关详细的测试文档,请参阅 测试指南。
需要帮助
#. 使用 PySide 进行 Python 封装。 #. QML 前端。 #. 编写 ClangFormat 配置。
欢迎任何建议!
贡献
#. 保持礼貌、尊重和协作精神。 #. 提交错误报告:
#. 描述您的环境(Qt 版本、编译器、操作系统等) #. 描述复现问题的步骤
#. 提交拉取请求:
#. 首先创建一个提案任务。我们可以共同设计出更好的方案。 #. 创建拉取请求。如果适用,请为您的问题创建一个简单示例,详细描述所做的更改,并提供用例。
#. 提交开发请求:
#. 详细描述您的问题 #. 提供一些用例。
#. 我在业余时间维护这个项目,当我工作或家庭事务繁忙时可能无法及时处理。如果我长时间没有反应或未回复,请提醒我一下。
引用
::
Dmitry Pinaev et al, Qt Nodes, (2013-2025), GitHub repository, https://github.com/paceholder/nodeeditor
BibTeX::
@misc{Pinaev2025, author = {Dmitry Pinaev et al}, title = {QtNodes. Node Editor}, year = {2025}, publisher = {GitHub}, journal = {GitHub repository}, howpublished = {\url{https://github.com/paceholder/nodeeditor}}, commit = {877ddb8c447a7a061a5022e9956a3194132e3dd9} }
支持
如果你喜欢这个项目,可以通过 PayPal 向我捐赠 |ImagePaypal|_
.. |ImagePaypal| image:: https://img.shields.io/badge/Donate-PayPal-green.svg .. _ImagePaypal: https://www.paypal.com/paypalme/DmitryPinaev
如果你的捐赠金额超过 100 美元,我会将其中的 100 美元转赠给某个救助患病儿童的基金会,并向你反馈相关情况。
致谢
3.0 版本的发布得到了 Davide Faconti 的慷慨帮助。
展示案例
YouTube 视频
.. image:: https://img.youtube.com/vi/pxMXjSvlOFw/0.jpg :target: https://www.youtube.com/watch?v=pxMXjSvlOFw
|
.. image:: https://img.youtube.com/vi/i_pB-Y0hCYQ/0.jpg :target: https://www.youtube.com/watch?v=i_pB-Y0hCYQ
CANdevStudio
CANdevStudio 是一款经济高效的跨平台 CAN 仿真软件替代品。CANdevStudio 使每位汽车开发人员都能对诸如点火状态、车门状态或倒挡等 CAN 信号进行仿真。凭借其模块化设计,新的自定义功能易于实现。
.. image:: assets/showcase-candevstudio.png
Chigraph
Chigraph 是一款面向初学者的可视化编程语言,其独特之处在于它是一种直观的流程图:
.. image:: assets/chigraph.png
它具有与 C/C++ 的轻松绑定、包管理以及酷炫的界面等特性。
Spkgen 粒子编辑器
Spkgen 是一款针对 SPARK 粒子引擎的编辑器,它采用基于节点的界面来为游戏创建粒子效果。
.. image:: assets/spkgen.png