2

我有一个从 QFrame 派生的自定义小部件。我需要非常频繁地绘制它(基本上,每次鼠标移动都会更新一张图片)。我检查了 Qt Basic 绘图示例:他们重写了paintEvent,创建了一个画家并进行了绘画(画家在其生命周期结束时死去,面对最后的花括号)。

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

谢谢你的时间,路易丝

4

1 回答 1

4

简单地说:别担心。

Qt 在幕后做了一些神奇的事情来快速创建 QPainter - 值得注意的是,状态的“重”部分(绘画引擎)由在同一绘画设备上运行的所有 QPainter 共享。(见这里。)

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

(这不仅限于 QPainter - Qt 为重物做了很多“幕后”共享、写入时复制类型操作。示例和教程展示了您应该如何使用 API(它们是通常质量很高)。遵循示例,仅在您有需要更复杂管理的特定原因/用例时才尝试超越它们。)

于 2012-04-09T11:10:35.657 回答