【问题标题】:Qt QGraphicsScene and QGraphicsItem eventsQt QGraphicsScene 和 QGraphicsItem 事件
【发布时间】:2012-11-22 19:34:52
【问题描述】:

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

  1. 添加到场景时
  2. 调整场景大小时

我现在的做法是 - 在场景的父级中创建 2 个信号:obj_create、scene_resize。并将它们连接到 gr.object 的插槽。这似乎不是最好的方法。我在 QGraphcisItem 中找不到像 addedToScenesceneResized 这样的任何事件...

非常感谢。

【问题讨论】:

    标签: qt events resize qgraphicsitem qgraphicsscene


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回答,但实际上 QGraphicsItem 中有一个特殊事件可以满足此需求...
    【解决方案2】:

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

    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);
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多