我有不同形状的QGraphicsItems,用户可以创建。 每一个都由:
组成移动“点手柄”会导致仅更改形状的一部分,移动旋转或平移手柄,从而导致旋转和平移整个项目。
一切都很好,除了一种情况:在整个设置旋转时移动点控制柄。然后其他点手柄也被移动,并且翻译不适合鼠标移动。如果整个设置未旋转(旋转= 0.0),一切都运行良好。同时将设置旋转回0.0。
我尝试使用setTransformOriginPoint进行几乎所有更改。过去有人有过这种行为吗?
非常感谢 斯特凡
请求的代码示例:
创建“母亲”项目:
BaseItem::BaseItem() :
QAbstractGraphicsShapeItem(),
...
{
setFlags( ItemIsSelectable );
m_rotateHandle = new RotationHandle(this);
m_translateHandle = new TranslationHandle(this);
...
}
创建翻译句柄:(父母是上面的项目)
BaseItem::TranslationHandle::TranslationHandle( BaseItem* parent ) :
QGraphicsRectItem(-6, -6, 12, 12, parent),
m_parent(parent)
{
setFlag( ItemIsMovable);
setFlag( ItemIgnoresTransformations);
setPos(100, 100);
}
创建旋转手柄:(父级是上面的项目)
BaseItem::RotationHandle::RotationHandle( BaseItem* parent) :
QGraphicsEllipseItem(-6, -6, 12, 12, parent),
m_parent(parent),
m_angle(0.0f)
{
setFlag( ItemIsMovable );
setFlag( ItemIgnoresTransformations);
setPos(150, 150);
}
轮换事件处理程序:
void BaseItem::RotationHandle::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
m_angle += (event->scenePos() - event->lastScenePos()).x();
QList<QGraphicsItem*> items = m_parent->scene()->selectedItems();
foreach(QGraphicsItem* item, items) {
BaseItem* bs_item = dynamic_cast<BaseShapeItem*>(item);
if(bs_item) {
bs_item->setRotation(m_angle);
}
}
}
点句柄构造函数:
BaseItem::PointHandle::PointHandle( QPointF position, BaseItem* parent, QColor penColor) :
QGraphicsRectItem(-4, -4, 8, 8, parent),
m_parent(parent)
{
setPos(position);
setFlag( ItemIsMovable );
setFlag( ItemIgnoresTransformations);
}
点句柄的移动事件:
void BaseItem::PointHandle::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
this->setPos( mapToParent(event->pos()) );
m_parent->updateShape();
}
更新形状方法:
void BaseItem::updateShape()
{
QPointF center = m_shape.boundingRect().center();
setTransformOriginPoint( center );
m_rotateHandle->setPos( center );
m_translateHandle->setPos(center.x(), center.y()-20);
}