다른 하나가 움직이면 QGraphicsScene
에 하나의 QGraphicsItem
을 이동 (또는 크기 변경)하고 싶습니다. 그러나 QGraphicsScene
개체에서 QGraphicsItem
에 액세스하려고하면 충돌이 발생합니다.QGraphicsItem의 위치를 다른 QGraphicsItem에 의존하게 만드는 방법은 무엇입니까?
여기에 가짜 예제가 있습니다. 나는 자동으로 원하는 : 내가 클릭 한 RedItem
을 끌어
크기 조정
BlueItem
의 폭입니다.을 클릭하여 끌면
RedItem
으로 이동하십시오.
더미 번호 :
redItem.h (A 픽스맵 항목)
#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 (A 사각형 크기 조정 항목)
#include <QGraphicsRectItem>
class BlueItem : public QGraphicsRectItem
{
public:
BlueItem();
protected:
void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
};
blueItem.cpp는
#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;
}
어떤 도움이나 조언이 크게 감상 할 수 redItem.cpp
graphicsViewWidget.h합니다 (GraphicsView)와 유사하다.
흥미 롭습니다! 나는 인상적인 항목 아래에서만 장면에서 만들 수 있었다. 그냥 명확히하기 위해 항목 A의 생성자에서 항목 B를 초기화한다는 것을 의미합니까? –
장면이나 켜기/끄기 장면과 같은 다른 기존 항목에 항목을 추가 할 수 있습니다. 부모 나'setParentItem()'함수를 전달하는 생성자를 사용할 수있다. 부모가 이미 장면에 추가 된 경우 새 객체도 자동으로 추가됩니다. – dtech
이 작업을 수행하는 예에 대한 링크가 있습니까? –