Я сделал, действительно итем двигается без проблем, все нормально. Но моей основной целью было - при движение одного итема, другой должен дорисовываться....вот с последним теперь беда, как дорисовать другой итем?
Я делаю на примере квадрата - сделал четыре створки квадрата.
WindowItem::WindowItem(QGraphicsItem *parent) : QGraphicsObject(parent)
{
setAcceptDrops(true);
}
// Левая створка
LeftGlume::LeftGlume(QGraphicsItem *parent) : WindowItem(parent)
{
}
QRectF LeftGlume::boundingRect() const
{
return QRectF(100, 100, 20, 500);
}
void LeftGlume::paint(QPainter *painter,
const QStyleOptionGraphicsItem *option, QWidget *widget)
{
Q_UNUSED(option);
Q_UNUSED(widget);
painter->drawRect(100,100,20,500);
}
void LeftGlume::mousePressEvent(QGraphicsSceneMouseEvent *e)
{
}
void LeftGlume::mouseMoveEvent(QGraphicsSceneMouseEvent *e)
{
}
// Верхняя створка
TopGlume::TopGlume(QGraphicsItem *parent) : WindowItem(parent)
{
}
QRectF TopGlume::boundingRect() const
{
return QRectF(100, 100, 500, 20);
}
void TopGlume::paint(QPainter *painter,
const QStyleOptionGraphicsItem *option, QWidget *widget)
{
Q_UNUSED(option);
Q_UNUSED(widget);
painter->drawRect(100,100,500,20);
}
void TopGlume::mousePressEvent(QGraphicsSceneMouseEvent *e)
{
}
void TopGlume::mouseMoveEvent(QGraphicsSceneMouseEvent *e)
{
}
// Нижняя створка
BottomGlume::BottomGlume(QGraphicsItem *parent) : WindowItem(parent)
{
}
QRectF BottomGlume::boundingRect() const
{
return QRectF(100, 580, 500, 20);
}
void BottomGlume::paint(QPainter *painter,
const QStyleOptionGraphicsItem *option, QWidget *widget)
{
Q_UNUSED(option);
Q_UNUSED(widget);
painter->drawRect(100,580,500,20);
}
void BottomGlume::mousePressEvent(QGraphicsSceneMouseEvent *e)
{
}
void BottomGlume::mouseMoveEvent(QGraphicsSceneMouseEvent *e)
{
}
// Правая створка
RightGlume::RightGlume(QGraphicsItem *parent) : WindowItem(parent)
{
}
QRectF RightGlume::boundingRect() const
{
return QRectF(580, 100, 20, 500);
}
void RightGlume::paint(QPainter *painter,
const QStyleOptionGraphicsItem *option, QWidget *widget)
{
Q_UNUSED(option);
Q_UNUSED(widget);
painter->drawRect(580,100,20,500);
}
void RightGlume::mousePressEvent(QGraphicsSceneMouseEvent *e)
{
if(e->button() == Qt::LeftButton)
{
point = e->pos();
}
}
void RightGlume::mouseMoveEvent(QGraphicsSceneMouseEvent *e)
{
RightGlume *rightG = new RightGlume;
int y;
y = rightG->pos().y();
setPos(e->scenePos().x() - point.x(), y);
QPainter *p = new QPainter;
p->drawArc(100,100,500,20,20,3);
scene()->update(0,0,2000,2000);
}
// Окно квадратное
RectWindow::RectWindow(QGraphicsItem *parent)
: WindowItem(parent)
{
QGraphicsObject *leftItem = new LeftGlume(this);
QGraphicsObject *rightItem = new RightGlume(this);
QGraphicsObject *topItem = new TopGlume(this);
QGraphicsObject *bottomItem = new BottomGlume(this);
leftItem->setPos(leftItem->pos().x(),leftItem->pos().y());
rightItem->setPos(rightItem->pos().x(),rightItem->pos().y());
topItem->setPos(topItem->pos().x(),topItem->pos().x());
bottomItem->setPos(bottomItem->pos().x(), bottomItem->pos().y());
}
QRectF RectWindow::boundingRect() const
{
return QRectF();
}
void RectWindow::paint(QPainter *painter,
const QStyleOptionGraphicsItem *option, QWidget *widget)
{
Q_UNUSED(painter);
Q_UNUSED(option);
Q_UNUSED(widget);
}
пока вот что получилось. На Сцене отображается квадрат, правая створка двигается, а как организовать дорисовку верхней и нижней створки ума не приложу....