在添加对象(通过放置)的图形视图中,我可以通过鼠标移动这些项目,当我将一个对象移动到另一个对象上时,被移动的对象应该是透明的。我该怎么做?
答案 0 :(得分:0)
我不相信您实际上想要完全透明,因为这将使以后无法从视觉上识别透明对象。降低不透明度-是的。
关于您的问题:场景中的每个项目都有一个边界矩形(或其他类型的边界区域)。您可以通过调用项目的boundingRect()
轻松获得它。返回的QRectF
具有bool QRect::intersects(const QRect &rectangle) const
函数(与QRect
一样)具有{{3}}函数,该函数采用另一个矩形并检查是否存在碰撞。
每当在拖动项目时移动鼠标,您都需要遍历场景中所有项目的全部或子集(通过子集,我的意思是仅在特定区域中的项目才能提高性能)并检查是否存在碰撞。如果检测到碰撞,则可以更改要拖动的项目或其下方的项目。
当然,要确保一项覆盖另一项,还需要检查Z值。最简单的方法是,将当前未拖动的所有项目保持在同一Z级别,然后每拖动一个Z级别将其Z级别增加一个,以使其在其他Z级别之上。