处理不重绘固体?

时间:2011-11-19 21:22:33

标签: qt qt4

我尝试为矩形编写句柄,以便调整大小。 有点有效:

http://programmingexamples.net/wiki/Qt/Utilities/HandleItem#HandleItem.cpp

但是一旦手柄被拖动一点点,它们中的大多数只会从实心填充变为轮廓。手柄曾经存在的地方周围也有奇怪的文物。最终,一些句柄停止一起工作。谁能解释我所看到的任何这些事情?这种方法是否合理?我仍然不确定为什么必须实现boundingRect() - 似乎对象应该只保持它们的位置和大小作为状态变量?

非常感谢任何建议。

1 个答案:

答案 0 :(得分:2)

您的问题可能正在发生,因为您正在绘制项目的boundingRect()之外的句柄。

boundingRect()需要在很多情况下实现,因为你在paint()函数中做了有趣的事情,它可以超出基类能够知道的范围。

这种事情的一个好的调试技巧是从paint()函数中实际绘制boundingRect(),并确保可见矩形适当地包含你的项目。例如:

painter->setPen( Qt::red )
painter->drawRect( boundingRect() );

如果您看到任何项目被绘制在该矩形之外,那么它将导致绘制工件,因为QGraphicsScene依赖于其准确性,以确定需要重新绘制场景的哪些部分。