2

// QT 4.8

サイズ変更可能な QGraphicsItem を実装しましたが、これはかなりうまく機能します。

ただし、ここでは、このサイズ変更可能なアイテムに子アイテムを含める必要があります。子アイテムのサイズ/位置は明らかに親のものに依存します。私の問題は、親のサイズが変更されたときに子に通知することです。しかし、これまでのところ、親自体は自身のサイズ変更を検出していません (一方、シーンでは、すべてが期待どおりに動作します!)

親アイテム(=サイズ変更可能なアイテム)でオーバーライドしようとしたアイテム

QVariant itemChange(QGraphicsItemChange, QVariant)

変更イベントをダンプするため。すべてのイベントを表示できますが、アイテムのサイズが変更されたときに itemChange メソッドが呼び出されることはありません。

どんな助けでも大歓迎です。


注意:

  • サイズ変更可能な QGraphicsItem コンストラクターで、フラグ QGraphicsItem::ItemSendGeometryChange を有効にしました

    ResizableGraphicsItem::ResizableGraphicsItem(QGraphicsItem *p_parent,
                                                 qreal p_initialWidth,
                                                 qreal p_initialHeight)
      : QGraphicsItem(p_parent), _width(p_initialWidth),
        _height(p_initialHeight), _resized(true)
    {
      setFlag(ItemSendsGeometryChanges);
      ...
    }
    
  • サイズ変更メソッドは次のようになります。

    void ResizableGraphicsItem::setSize(qreal p_width, qreal p_height)
    { 
      prepareGeometryChange();
    
      if ((_width  != p_width) ||
          (_height != p_height))
      {
        _width   = p_width;
        _height  = p_height;
        _resized = true;
      }
    }
    
  • と:

    QRectF ResizableGraphicsItem::boundingRect() const
    {
      return QRectF(0, 0, _width, _height);
    }
    
4

0 に答える 0