如何计算和设置QGraphicsItem相对于新父母来源的新位置?

时间:2014-12-01 19:44:10

标签: qt qt4 qgraphicsview qgraphicsitem qgraphicsscene

问题

如何计算和设置QGraphicsItem相对于新父母来源的新位置?

背景资料

我正在开发一个调整大小的功能,在双击给定对象(矩形,椭圆等)时会弹出一个带有一个锚点的边界框。用户可以通过调整锚点的位置来调整对象的大小。

什么是工作

用户可以在首次调整大小时双击对象并调整大小。

有问题的观察

在连续调整大小(通过)时,用户在双击对象并稍微移动锚点后立即看到对象“跳跃”(即突然调整大小)。 对象不会突然调整到任何位置,而是完全调整到前一个父级的位置。

找到根本原因

我已将问题缩小到以下语句(来自我们重载的mousemoveevent()函数的片段):

dynamic_cast<RIShape*>(_item)->scaleBy(myp, xscale, yscale);

参考描述类似问题的在线发布

在我看了一下之前,在发布此消息之前,我遇到了以下参考: http://www.qtcentre.org/threads/22775-Qgraphicsitem-parent-child-paint-problem

根据这条消息判断,我需要计算并设置QGraphicsItem(_item)相对于新父母来源的新位置。因此,上面的问题。

P.S。如果您有兴趣,可以使用以下附加代码片段:

创建大小调整器(带有锚点的边界框)并绑定到要调整大小的对象的方法

QGraphicsItem* item = itemAt( event->pos() );
RIShape*       shape= dynamic_cast<RIShape*>(item);
if( item && shape )
{
  if( !_selector )
  {
    _selector = new RISelector(item);
...

初始化Resizer的构造函数的方法(RISelector)

  RISelector(QGraphicsItem* item)
  : QGraphicsRectItem(item->sceneBoundingRect()), _W(10.0),
    _rect(item->sceneBoundingRect()), _pivot(0,0), _pressed(false), _isResizing(false),
  _bndBoxPen(Qt::black, 2, Qt::DashLine, Qt::RoundCap, Qt::RoundJoin),
  _anchorPen(Qt::black, 2, Qt::SolidLine), _item(item), _isLef(false)

0 个答案:

没有答案