Qt QGraphicsScene和QGraphicsItem事件

时间:2012-11-22 19:34:52

标签: qt events resize qgraphicsitem qgraphicsscene

我有一些QGraphicsObjects,它们取决于它们所在场景的大小。所以我的图形对象需要知道两个事件何时发生:

  1. 将其添加到场景中
  2. 当场景调整大小时
  3. 我现在的做法是 - 在场景的父级中创建2个信号:obj_create,scene_resize。并将它们连接到gr.object的插槽。这似乎不是最好的方式。我在QGraphcisItem中找不到像 addedToScene sceneResized 这样的事件......

    非常感谢。

2 个答案:

答案 0 :(得分:1)

我建议使用两种可能的方法之一:在GraphicsItem中子类QObject,只需使用Signal / Slots或定义自己的接口,让我们用resize方法说IResizableEvent。在GraphicsItem中,使用调整大小代码实现该方法。当您在Scene类中检测到场景调整大小时,只需迭代所有项目,将它们转换为接口类型并调用resize方法。

答案 1 :(得分:0)

我只需要准确地阅读文档...希望它可以帮助某人......

QVariant        itemChange(GraphicsItemChange change, const QVariant &value)
{

    if (change == QGraphicsItem::ItemSceneHasChanged)
    {

            this->performSomeUpdates();
            QObject::connect(this->scene(),SIGNAL(sceneRectChanged(QRectF)),this,SLOT(sceneRectChanged(QRectF)));

    }

    return QGraphicsItem::itemChange(change, value);

}