我有一个从QFrame派生的自定义Widget。我将需要非常频繁地使用它(基本上,每次移动鼠标都会更新图片)。我检查了Qt Basic的绘图示例:他们重写了paintEvent,创建了一个绘画程序并进行了绘制(并且该绘画程序在生命周期的尽头就死了,面对着最后一个当前的括号)。
对于我的小型测试应用程序,性能不是问题,但我想更好地了解绘画操作(或者:在一个经常调用的方法中实例化临时对象的成本),所以我想知道:如果自定义QFrame持有一个指向(永久)画家并将其用于绘画,是否比每次调用paintEvent都创建和删除一个画家更好?
谢谢你的时间,
路易丝
最佳答案
简而言之:不用担心。
Qt在幕后做了一些魔术,以加快QPainter的创建速度-值得注意的是,状态的“繁重”部分(绘画引擎)由在同一绘画设备上运行的所有QPainter共享。 (请参阅here。)
现在,如果您从paintEvent
处理程序中调用了一堆需要绘画的函数,请将它们的引用传递给QPainter-无需为每个单独的调用创建一个。
但通常来说,不用担心。使用与示例相同的习惯用法,并且仅在实际测量出实例化QPainters是代码中的瓶颈时,才尝试做“更聪明”的事情。
(这不仅限于QPainter-Qt进行了很多“幕后”共享,对重物的写时复制类型操作。这些示例和教程说明了如何使用API(它们是通常质量很高)。请按照示例操作,并仅在有特殊原因/用例的情况下才使用它们,因为这些原因/用例需要更复杂的管理。)
关于c++ - 为小部件存储画家是否有意义?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10072118/