gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:28:58 25 4
gpt4 key购买 nike

我想让 QGraphicsScene 中的一个 QGraphicsItem 在另一个移动时移动(或改变大小)。但是,尝试从 QGraphicsScene 对象访问任一 QGraphicsItem 会导致崩溃。

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

  1. 当我点击并拖动 RedItem 时调整 BlueItem 的宽度。

  2. 当我单击并拖动 BlueItem 时移动 RedItem

伪代码:

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

图形 View 组件.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 的子项,那么它将位于其坐标空间中。这意味着所有变换 - 移动、缩放、旋转……您应用于父项的所有内容也将应用于其所有子项及其子项等等……

关于c++ - 如何使 QGraphicsItem 的位置依赖于另一个 QGraphicsItem?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40184591/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com