Skip to content

ElaGraphics 图形组件文档

概述

ElaGraphics 系列组件包含 ElaGraphicsItem(图形项)和 ElaGraphicsLineItem(连线项)两个主要组件,用于构建可视化图形编辑场景。

ElaGraphicsItem

特性

  • 可移动/选择
  • 图像显示
  • 连接端口
  • 序列化支持
  • 事件处理
  • 状态管理
  • 数据路由
  • 唯一标识

属性

cpp
// 基础属性
Q_PROPERTY(int width READ getWidth WRITE setWidth)
Q_PROPERTY(int height READ getHeight WRITE setHeight)
Q_PROPERTY(QImage itemImage READ getItemImage WRITE setItemImage)
Q_PROPERTY(QImage itemSelectedImage READ getItemSelectedImage WRITE setItemSelectedImage)
Q_PROPERTY(QString itemName READ getItemName WRITE setItemName)
Q_PROPERTY(QVariantMap dataRoutes READ getDataRoutes WRITE setDataRoutes)
Q_PROPERTY(int maxLinkPortCount READ getMaxLinkPortCount WRITE setMaxLinkPortCount)

公共方法

端口操作

cpp
// 设置端口状态
void setLinkPortState(bool isFullLink);
void setLinkPortState(bool isLink, int portIndex);

// 获取端口状态
bool getLinkPortState(int portIndex) const;
QVector<bool> getLinkPortState() const;

// 获取已用/未用端口
int getUsedLinkPortCount() const;
QVector<int> getUsedLinkPort() const;
int getUnusedLinkPortCount() const;
QVector<int> getUnusedLinkPort() const;

ElaGraphicsLineItem

特性

  • 贝塞尔曲线
  • 端口连接
  • 抗锯齿
  • 可选择
  • 状态管理
  • 双向连接
  • 端口映射
  • 自动更新

属性

cpp
// 基础属性
Q_PROPERTY(QPointF startPoint READ getStartPoint WRITE setStartPoint)
Q_PROPERTY(QPointF endPoint READ getEndPoint WRITE setEndPoint)
Q_PROPERTY(ElaGraphicsItem* startItem READ getStartItem WRITE setStartItem)
Q_PROPERTY(ElaGraphicsItem* endItem READ getEndItem WRITE setEndItem)
Q_PROPERTY(int startItemPort READ getStartItemPort WRITE setStartItemPort)
Q_PROPERTY(int endItemPort READ getEndItemPort WRITE setEndItemPort)

公共方法

连接检查

cpp
// 检查目标连接
bool isTargetLink(ElaGraphicsItem* item) const;
bool isTargetLink(
    ElaGraphicsItem* item1, 
    ElaGraphicsItem* item2
) const;
bool isTargetLink(
    ElaGraphicsItem* item1,
    ElaGraphicsItem* item2,
    int port1,
    int port2
) const;

使用示例

图形项

1. 创建图形项

cpp
// 创建基础图形项
auto item = new ElaGraphicsItem();

// 创建指定大小的图形项
auto item = new ElaGraphicsItem(100, 100);

// 设置图形项属性
item->setItemName("MyItem");
item->setMaxLinkPortCount(4);
item->setItemImage(QImage("item.png"));

2. 端口管理

cpp
// 设置端口状态
item->setLinkPortState(true, 0); // 设置端口0为已连接
item->setLinkPortState(false);   // 设置所有端口为未连接

// 获取可用端口
auto unusedPorts = item->getUnusedLinkPort();
if (unusedPorts.count() > 0) {
    int port = unusedPorts.first();
    // 使用端口
}

连线项

1. 创建连线

cpp
// 创建项之间的连线
auto line = new ElaGraphicsLineItem(
    startItem,    // 起始项
    endItem,      // 结束项
    0,           // 起始端口
    1            // 结束端口
);

// 创建点之间的连线
auto line = new ElaGraphicsLineItem(
    QPointF(0, 0),    // 起始点
    QPointF(100, 100) // 结束点
);

2. 连接检查

cpp
// 检查项是否连接
if (line->isTargetLink(item)) {
    // 项已连接
}

// 检查特定端口连接
if (line->isTargetLink(
    item1, item2, port1, port2)) {
    // 指定端口已连接
}

注意事项

  1. 图形项管理
  2. 端口状态
  3. 连线更新
  4. 性能优化
  5. 内存管理
  6. 事件处理
  7. 序列化
  8. 状态同步

最佳实践

  1. 合理设置端口数
  2. 优化连线绘制
  3. 控制图形项数量
  4. 注意性能
  5. 统一交互
  6. 保持一致
  7. 动画流畅
  8. 响应式布局

相关组件

  • QGraphicsObject: 图形项基类
  • QGraphicsPathItem: 路径项基类
  • QGraphicsScene: 场景组件
  • QGraphicsView: 视图组件