如何更改 QGraphicsScene 上 QGraphicsItem 的 boundingRect() 的位置?
How do you change the position of the boundingRect() of a QGraphicsItem on a QGraphicsScene?
我已经把我的QGraphicsItem
的boundingRect()
设置到了场景中的某个坐标。如何根据 QGraphicsItem::mouseMoveEvent
?
更改坐标
下面是我写的代码。但是此代码仅将我在 boundingRect()
内绘制的形状的位置设置为 boundingRect()
内的坐标。我想要做的是将整个 QGraphicsItem
移动到一个设定的坐标。
void QGraphicsItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
QGraphicsItem::mouseMoveEvent(event);
if (y()>=394 && y()<425) //if in the range between 425 and 394 I want it to move to 440.
{
setPos(440, y());
}
else if ... //Other ranges such as that in the first if statement
{
... //another y coordinate
}
else //If the item is not in any of the previous ranges it's y coordinate is set to 0
{
setPos(0,y()); //I had expected the item to go to y = 0 on the scene not the boundingRect()
}
}
场景是880×860,boundingRect()
设置如下:
QRectF QGraphicsItem::boundingRect() const
{
return QRectF(780,425,60,30);
}
项目的边界矩形在其 本地坐标 中定义项目,而设置其在场景中的位置是使用 场景坐标 .
例如,让我们创建一个骨架 Square
class,派生自 QGraphicsItem
class Square : public QGraphicsItem
{
Q_OBJECT
public:
Square(int size)
: QGraphicsItem(NULL) // we could parent, but this may confuse at first
{
m_boundingRect = QRectF(0, 0, size, size);
}
QRectF boundingRect() const
{
return m_boundingRect;
}
private:
QRectF m_boundingRect;
};
我们可以创建一个宽度和高度为 10 的正方形
Square* square = new Square(10);
如果物品被添加到一个QGraphicsScene
,它会出现在场景(0, 0)的top-left处;
pScene->addItem(square); // assuming the Scene has been instantiated.
现在我们可以移动场景中的square
...
square->setPos(100, 100);
square
会移动,但它的宽度和高度仍然是10个单位。如果 square
的 bounding rect 改变了,那么 rect 本身也会改变,但它在场景中的位置仍然是一样的。让我们调整 square
...
的大小
void Square::resize(int size)
{
m_boundingRect = QRectF(0, 0, size, size);
}
square->resize(100);
square
现在的宽度和高度为 100,但它的位置相同,我们可以将 square
与其定义的边界矩形
分开移动
square->setPos(200, 200);
What I want to be able to do is move the entire QGraphicsItem to a set coordinate.
所以,希望这已经解释了边界矩形是项目的内部(局部坐标)表示,要移动项目,只需调用 setPos
,它将相对于任何父项目移动项目, 或者如果不存在父项,它将相对于场景移动它。
我已经把我的QGraphicsItem
的boundingRect()
设置到了场景中的某个坐标。如何根据 QGraphicsItem::mouseMoveEvent
?
下面是我写的代码。但是此代码仅将我在 boundingRect()
内绘制的形状的位置设置为 boundingRect()
内的坐标。我想要做的是将整个 QGraphicsItem
移动到一个设定的坐标。
void QGraphicsItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
QGraphicsItem::mouseMoveEvent(event);
if (y()>=394 && y()<425) //if in the range between 425 and 394 I want it to move to 440.
{
setPos(440, y());
}
else if ... //Other ranges such as that in the first if statement
{
... //another y coordinate
}
else //If the item is not in any of the previous ranges it's y coordinate is set to 0
{
setPos(0,y()); //I had expected the item to go to y = 0 on the scene not the boundingRect()
}
}
场景是880×860,boundingRect()
设置如下:
QRectF QGraphicsItem::boundingRect() const
{
return QRectF(780,425,60,30);
}
项目的边界矩形在其 本地坐标 中定义项目,而设置其在场景中的位置是使用 场景坐标 .
例如,让我们创建一个骨架 Square
class,派生自 QGraphicsItem
class Square : public QGraphicsItem
{
Q_OBJECT
public:
Square(int size)
: QGraphicsItem(NULL) // we could parent, but this may confuse at first
{
m_boundingRect = QRectF(0, 0, size, size);
}
QRectF boundingRect() const
{
return m_boundingRect;
}
private:
QRectF m_boundingRect;
};
我们可以创建一个宽度和高度为 10 的正方形
Square* square = new Square(10);
如果物品被添加到一个QGraphicsScene
,它会出现在场景(0, 0)的top-left处;
pScene->addItem(square); // assuming the Scene has been instantiated.
现在我们可以移动场景中的square
...
square->setPos(100, 100);
square
会移动,但它的宽度和高度仍然是10个单位。如果 square
的 bounding rect 改变了,那么 rect 本身也会改变,但它在场景中的位置仍然是一样的。让我们调整 square
...
void Square::resize(int size)
{
m_boundingRect = QRectF(0, 0, size, size);
}
square->resize(100);
square
现在的宽度和高度为 100,但它的位置相同,我们可以将 square
与其定义的边界矩形
square->setPos(200, 200);
What I want to be able to do is move the entire QGraphicsItem to a set coordinate.
所以,希望这已经解释了边界矩形是项目的内部(局部坐标)表示,要移动项目,只需调用 setPos
,它将相对于任何父项目移动项目, 或者如果不存在父项,它将相对于场景移动它。