QtNodeEditor 是一个基于 Qt 框架的节点式可视化编程工具,可用于构建数据流、材质编辑器、AI行为树等图形化编程界面。
环境准备
-
安装 Qt (推荐 5.15+ 或 6.x 版本)
-
获取 QtNodes 库:
git clone https://github.com/paceholder/nodeeditor
-
编译库:
mkdir build && cd build cmake .. -DCMAKE_PREFIX_PATH="your_qt_installation_path" make
基础架构设计
核心组件
组件 | 功能 |
---|---|
FlowScene |
管理所有节点和连接的场景 |
FlowView |
提供视图和缩放功能 |
Node |
单个节点对象 |
NodeDataModel |
节点数据模型(需自定义) |
Connection |
节点间的数据连接 |
自定义节点开发流程
1 创建数据模型
继承 NodeDataModel
实现自定义节点:
#pragma once
#include <QtNodes/NodeDataModel>
using QtNodes::NodeData;
using QtNodes::NodeDataModel;
using QtNodes::PortType;
using QtNodes::PortIndex;
class MathOperationDataModel : public NodeDataModel {
Q_OBJECT
public:
~MathOperationDataModel() override = default;
// 节点标题
QString caption() const override { return "Math Operation"; }
// 唯一标识
QString name() const override { return "MathOperation"; }
// 端口数量
unsigned int nPorts(PortType portType) const override {
return (portType == PortType::In) ? 2 : 1;
}
// 端口数据类型
NodeDataType dataType(PortType, PortIndex) const override {
return NodeDataType {"decimal", "Decimal"};
}
// 计算逻辑
void setInData(std::shared_ptr<NodeData> data, PortIndex portIndex) override {
_inputData[portIndex] = std::dynamic_pointer_cast<DecimalData>(data);
compute();
}
// 更多实现...
};
2 注册节点到场景
#include <QtNodes/DataModelRegistry>
auto registerDataModels() {
auto ret =