Tôi gặp sự cố khi di chuyển đối tượng của mình chỉ qua trục x. Tôi biết bạn cần một cái gì đó với chức năng QVariant itemChange (GraphicsItemChange change, const QVariant & value)
. Tôi đã tìm thấy một cái gì đó như thế này:QGraphicsItem di chuyển đối tượng chỉ qua trục X
QVariant CircleItem::itemChange(GraphicsItemChange change, const QVariant &value)
{
if (change == ItemPositionChange)
return QPointF(pos().x(), value.toPointF().y());
return QGraphicsItem::itemChange(change, value);
}
Nhưng nó không hoạt động. Tôi mới đến Qt, vì vậy tôi không biết, làm thế nào để thay đổi mã của thing.Here này để GraphicsItem tôi:
#include "circleitem.h"
CircleItem::CircleItem()
{
RectItem = new RoundRectItem();
MousePressed = false;
setFlag(ItemIsMovable);
}
void CircleItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
if(MousePressed)
{
painter->setBrush(QBrush(QColor(0, 0, 255)));
painter->setPen(QPen(QColor(0, 0, 255)));
}
else
{
painter->setBrush(QBrush(QColor(255, 255, 255)));
painter->setPen(QPen(QColor(255, 255, 255)));
}
painter->drawEllipse(boundingRect().center(), boundingRect().height()/4 - 7, boundingRect().height()/4 - 7);
}
QRectF CircleItem::boundingRect() const
{
return RectItem->boundingRect();
}
void CircleItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
MousePressed = true;
update(QRectF().x(), boundingRect().y(), boundingRect().width(), boundingRect().height());
QGraphicsItem::mousePressEvent(event);
}
void CircleItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
MousePressed = false;
update(QRectF().x(), boundingRect().y(), boundingRect().width(), boundingRect().height());
QGraphicsItem::mouseReleaseEvent(event);
}
QVariant CircleItem::itemChange(GraphicsItemChange change, const QVariant &value)
{
if (change == ItemPositionChange)
return QPointF(pos().x(), value.toPointF().y());
return QGraphicsItem::itemChange(change, value);
}
Cảm ơn đã trả lời.
Thx cho trả lời, nó làm việc (chỉ cần tôi quá choáng váng) chờ một số câu hỏi để trả lời trong một thời gian :) –