• 6137阅读
  • 3回复

如何消除虚影? 已解决 [复制链接]

上一主题 下一主题
离线biggerdog
 
只看楼主 正序阅读 楼主  发表于: 2011-01-10
— 本帖被 XChinux 执行加亮操作(2011-01-14) —
我在场景中新建两个矩形,当两个矩形被选中拖动后,光标所指的矩形(白色的)没有什么问题,而没有被光标指定的矩形(红色的)却有虚影,请问如何解决? 谢谢

[ 此帖被biggerdog在2011-01-11 16:24重新编辑 ]
离线biggerdog
只看该作者 3楼 发表于: 2011-01-11
问题已经解决。

由于prepareGeometryChange ()函数是保护函数,在场景中不能直接调用,因此在自定义图元中重新定义个公共函数
void ShapeItem::prepareGeometryModify ()
{
     prepareGeometryChange ();
}

然后把上面的
  item->update();
改成
  ((ShapeItem*)item)->prepareGeometryModify();
就大功告成了。没有虚影,也不用整个场景更新,就可以做到移动多个选中图元很顺畅。

再次感谢dbzhang800,让我找到问题所在。
离线biggerdog
只看该作者 2楼 发表于: 2011-01-11
回 1楼(dbzhang800) 的帖子
首先谢谢
我在矩形的mouseMoveEvent事件中调用了prepareGeometryChange(),所以光标所指定的矩形刷新没有问题,而我移动的是选定的所有矩形,因此在场景的mouseMoveEvent事件中进行的处理,部分代码如下:
foreach(QGraphicsItem* item, selectedItems())
{
     UObject* object = (UObject*)(item->data(1).toULongLong());
     object->setTopLeft(object->topLeft() + dPoint);        
     object->setOrigin(object->origin() + dPoint, true);    
     item->update();
}
我在UObject中定义矩形的数据,在相应的item中paint中调用UObject中的数据进行绘制

当然啦 刷新场景可以解决这个问题,但是当图元很多时,移动就太缓慢了

请问问题出在什么地方?
[ 此帖被biggerdog在2011-01-11 10:22重新编辑 ]
离线dbzhang800

只看该作者 1楼 发表于: 2011-01-10
1. 你的矩形移动是如何实现的? 通过改变item的pos还是不通过?

2. 前者的话,item的 boundingRect 设置是否正确,后者的话,prepareGeometryChange 有没有调用

3. ...
快速回复
限100 字节
 
上一个 下一个