QGraphicsScene
に別のものが動いたらQGraphicsItem
を移動(またはサイズ変更)したいと思います。しかし、QGraphicsScene
オブジェクトからQGraphicsItem
にアクセスしようとすると、クラッシュすることがあります。QGraphicsItemの位置を別のQGraphicsItemに依存させる方法は?
ここにはダミーの例があります。私はクリックしてドラッグRedItem
とき
リサイズ
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は
#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
この例のリンクはありますか? –