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, []{
// 显示连线对话框
});注意事项
- 继承自 QGraphicsScene
- 自动处理主题切换
- 智能内存管理
- 事件处理
- 性能优化
- 连线检查
- 序列化完整性
- 坐标转换
最佳实践
- 合理设置大小
- 控制图形项数量
- 优化连线显示
- 注意性能
- 统一交互
- 保持一致
- 动画流畅
- 响应式布局
相关组件
- QGraphicsScene: 基类
- ElaGraphicsItem: 图形项
- ElaGraphicsLineItem: 连线项
- QGraphicsView: 视图组件