Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
假设我在屏幕上有一个用全局屏幕坐标定义的区域。有一个小部件(顶级窗口)移动到该区域(使用标准动画技术)。我想剪掉恰好位于屏幕定义区域之外的小部件部分,直到它完全进入该区域,即我只希望在该矩形内绘制小部件。
一种可能的次优解决方案是在小部件位置发生变化时调用 update(),然后在paintEvent 中我可以计算并在 QPainter 上设置相关的本地剪辑。然而,仅仅因为它在屏幕上移动而重绘整个窗口是非常低效的。基本上我的问题归结为是否可以在小部件上设置全局剪辑区域?
我相信全局裁剪是不可能的。但是,如果您担心频繁重绘并且您的小部件内容不会经常更改或永远不会更改,您可以绘制QPixmap到paintEvent(). 而在paintEvent()计算剪裁区域后,您只需使用“QPainter::drawPixmap()”即可快速绘制您的内容。这应该有助于解决任何性能问题。
QPixmap
paintEvent()