为小部件存储画家是否有意义?

时间:2012-04-09 10:49:00

标签: c++ qt

我有一个从QFrame派生的自定义Widget。我需要经常使用它(基本上,每次鼠标移动都会更新图片)。我检查了Qt Basic绘图示例:它们覆盖了paintEvent,创建了一个画家并进行绘制(画家在其生命周期结束时死亡,面向最终的曲线支架)。

对于我的小测试应用程序,性能没有问题,但我想更好地了解绘制操作(或者更确切地说:在一个经常调用的方法中实例化临时对象的成本),所以我想知道:如果自定义QFrame持有指向(永久)画家的指针并将其用于绘画,这会比每次调用paintEvent创建和删除一个更好吗?

谢谢你的时间, 路易丝

1 个答案:

答案 0 :(得分:4)

简单地说:不要担心。

Qt在幕后做了一些魔术来快速创建QPainter - 值得注意的是,状态的“重”部分(绘图引擎)由在同一个绘图设备上运行的所有QPainter共享。 (见here。)

现在,如果您从paintEvent处理程序中调用一堆需要画家的函数,请将它们传递给QPainter - 不需要为每个单独的调用创建一个。 但一般来说,不要担心。使用与示例中相同的习语,只有在实际度量实例化QPainters是代码中的瓶颈时才尝试做“更聪明”的事情。

(这不仅限于QPainter - Qt为重型对象做了很多“幕后”共享,写时复制操作。示例和教程展示了你应该如何使用API​​(并且它们通常质量非常高。)按照示例进行操作,如果您有特殊原因/用例需要更复杂的管理,请尽量超越它们。)