Skip to content

ElaGraphicsScene 组件文档

概述

ElaGraphicsScene 是一个现代化的图形场景组件,继承自 QGraphicsScene。它提供了图形项管理、连线功能、序列化等特性。

特性

  • 图形项管理
  • 连线功能
  • 序列化支持
  • 场景模式
  • 事件处理
  • 选择管理
  • 坐标转换
  • 性能优化

属性

基础属性

cpp
// 检查连接端口
Q_PROPERTY(bool isCheckLinkPort 
    READ getIsCheckLinkPort 
    WRITE setIsCheckLinkPort)

// 序列化路径
Q_PROPERTY(QString serializePath 
    READ getSerializePath 
    WRITE setSerializePath)

公共方法

图形项操作

cpp
// 添加图形项
void addItem(ElaGraphicsItem* item);

// 移除图形项
void removeItem(ElaGraphicsItem* item);

// 移除选中项
void removeSelectedItems();

// 清空场景
void clear();

// 创建并添加图形项
QList<ElaGraphicsItem*> createAndAddItem(
    int width, 
    int height, 
    int count = 1
);

图形项查询

cpp
// 获取选中的图形项
QList<ElaGraphicsItem*> getSelectedElaItems() const;

// 获取所有图形项
QList<ElaGraphicsItem*> getElaItems();

// 获取指定位置的图形项
QList<ElaGraphicsItem*> getElaItems(QPoint pos);
QList<ElaGraphicsItem*> getElaItems(QPointF pos);
QList<ElaGraphicsItem*> getElaItems(QRect rect);
QList<ElaGraphicsItem*> getElaItems(QRectF rect);

连线操作

cpp
// 获取连线列表
QList<QVariantMap> getItemLinkList() const;

// 添加连线
bool addItemLink(
    ElaGraphicsItem* item1,
    ElaGraphicsItem* item2,
    int port1 = 0,
    int port2 = 0
);

// 移除连线
bool removeItemLink(ElaGraphicsItem* item1);
bool removeItemLink(
    ElaGraphicsItem* item1,
    ElaGraphicsItem* item2,
    int port1 = 0,
    int port2 = 0
);

序列化

cpp
// 序列化场景
void serialize();

// 反序列化场景
void deserialize();

信号

cpp
// 显示连线
void showItemLink();

// 鼠标事件
void mouseLeftClickedItem(ElaGraphicsItem* item);
void mouseRightClickedItem(ElaGraphicsItem* item);
void mouseDoubleClickedItem(ElaGraphicsItem* item);

使用示例

基础用法

1. 创建场景

cpp
// 创建场景
ElaGraphicsScene* scene = 
    new ElaGraphicsScene();

// 设置场景模式
scene->setSceneMode(
    ElaGraphicsSceneType::SceneMode::Default
);

// 添加到视图
view->setScene(scene);

2. 图形项管理

cpp
// 创建图形项
auto items = scene->createAndAddItem(
    100,  // 宽度
    100,  // 高度
    2     // 数量
);

// 移除选中项
scene->removeSelectedItems();

// 清空场景
scene->clear();

3. 连线操作

cpp
// 添加连线
scene->addItemLink(
    item1,  // 第一个图形项
    item2,  // 第二个图形项
    0,      // 端口1
    1       // 端口2
);

// 移除连线
scene->removeItemLink(item1, item2);

高级用法

1. 序列化

cpp
// 设置序列化路径
scene->setSerializePath("./scene.dat");

// 保存场景
scene->serialize();

// 加载场景
scene->deserialize();

2. 事件处理

cpp
// 连接信号
connect(scene, 
    &ElaGraphicsScene::mouseLeftClickedItem,
    this, [](ElaGraphicsItem* item) {
    // 处理左键点击
});

connect(scene,
    &ElaGraphicsScene::showItemLink,
    this, []{
    // 显示连线对话框
});

注意事项

  1. 继承自 QGraphicsScene
  2. 自动处理主题切换
  3. 智能内存管理
  4. 事件处理
  5. 性能优化
  6. 连线检查
  7. 序列化完整性
  8. 坐标转换

最佳实践

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

相关组件

  • QGraphicsScene: 基类
  • ElaGraphicsItem: 图形项
  • ElaGraphicsLineItem: 连线项
  • QGraphicsView: 视图组件