繁体   English   中英

如何使QGraphicsItem的位置依赖于另一个QGraphicsItem?

[英]How to make a QGraphicsItem's position dependent on another QGraphicsItem?

我想在另一个移动时在QGraphicsScene移动(或改变大小)中制作一个QGraphicsItem 但是,试图访问任何QGraphicsItemQGraphicsScene对象会导致崩溃。

这是一个虚拟的例子。 我想自动:

  1. 单击并拖动RedItem时调整BlueItem的宽度。

  2. 移动RedItem当我点击并拖动BlueItem

虚拟代码:

redItem.h(一个像素图项目)

#include <QGraphicsPixmapItem>

class RedItem : public QGraphicsPixmapItem
{
public:
  RedItem();

protected:
  void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
};

redItem.cpp

RedItem::RedItem()
{
  setPixmap(QPixmap(redPixMap));
  setFlags(ItemIsMovable);
  setCacheMode(DeviceCoordinateCache);
}

void RedItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
  setPos(event->scenePos(),0); //I can override this part just fine.
}

blueItem.h(可调整大小的矩形项)

#include <QGraphicsRectItem>

class BlueItem : public QGraphicsRectItem
{
public:
  BlueItem();

protected:
  void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
};

blueItem.cpp类似于redItem.cpp

graphicsViewWidget.h(GraphicsView)

#include <QGraphicsView>
#include "blueItem.h"
#include "redItem.h"


class GraphicsViewWidget : public QGraphicsView
{
  Q_OBJECT
public:
  explicit GraphicsViewWidget(QWidget *parent = 0);

protected:
  virtual void mouseMoveEvent(QMouseEvent *event);

private:
  RedItem *red;
  BlueItem *blue;
};

graphicsViewWidget.cpp

#include "graphicsViewWidget.h"
#include <QRectF>

void Qx::createItem(int frame)
{

    red = new RedItem;
    red->setPos(0, 0);
    scene()->addItem(red);


    blue = new BlueItem;
    blue->setPos(10, 10);
    scene()->addItem(blue);
}

void GraphicsViewWidget::mouseMoveEvent(QMouseEvent *event) //QGraphicsSceneMouseEvent
{
  QGraphicsView::mouseMoveEvent(event);

  //if(redItem moves)
  //  resize blueItem;

  //if(blueItem moves)
  //  move redItem;

}

任何帮助或建议将不胜感激。

如果将项目B作为项目A的子项,则它将存在于其坐标空间中。 这意味着所有转换 - 移动,缩放,旋转......您应用于父项的所有内容也将应用于其所有子项及其子项等等.​​..

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM