【问题标题】:Dragging multiple QGraphicsItems in different QGraphicsScenes for the same amount在不同的 QGraphicsScene 中以相同的数量拖动多个 QGraphicsItem
【发布时间】:2012-10-02 20:11:34
【问题描述】:

我有自己的类(MyGraphicsScene、MyGraphicsView、MyGraphicsItem)派生自 QGraphicsScene、QGraphicsView 和 QGraphicsItem。

然后,我在主窗口中创建九 (9) 个 MyGraphicsScene 实例,通过九个 MyGraphicsView 实例显示。所有九个 MyGraphicsScene 都包含指向彼此的指针。

如何在一个 MyGraphicsScene 中拖动 MyGraphicsItem 的一个实例,然后自动拖动某些 MyGraphicsItem 实例(在剩余的八个 MyGraphicsScene 中)以相同的数量/距离/矢量?

我的第一个想法是重新实现 MyGraphicsItem::itemChange(使用 change == QGraphicsItem::ItemPositionChange),然后为 MyGraphicsItem 的剩余实例(包含在其他 MyGraphicsScenes 中)调用 setPos()。但是这不起作用,因为我将获得无限递归(setPos() 也会触发 itemChange(),包括原始 MyGraphicsItem)。

来自经验丰富的 Qt 人员的任何其他想法?

【问题讨论】:

    标签: qt qgraphicsview qgraphicsitem qgraphicsscene


    【解决方案1】:

    我确实知道您可以在多个视图中使用相同的QGraphicsScene。因此,如果您只是想获得同一事物的多个视图,请致电 MyGraphicsView 来查看所有相同的场景。

    【讨论】:

      【解决方案2】:

      如果您为 QGraphicsItem 定义派生类(我想您已经有了,对吗?)并重新实现 mouseMoveEvent,以便它对所有 9 个对象调用 move 方法。

      请记住,您可以使用QMouseEvent 的所有属性,例如buttons(), pos().

      void MyGraphicsItem::mouseMoveEvent( QMouseEvent *event )
      {
        if (event->buttons() & Qt::LeftButton) {
          QPoint pos = event->pos();
          // ...
        }
      }
      

      希望有所帮助!

      【讨论】:

        猜你喜欢
        • 2013-06-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-13
        • 1970-01-01
        相关资源
        最近更新 更多