gpt4 book ai didi

c++ - 为小部件存储画家有意义吗?

转载 作者:搜寻专家 更新时间:2023-10-31 01:15:28 25 4
gpt4 key购买 nike

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

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

谢谢你的时间,路易丝

最佳答案

简单地说:不用担心。

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

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

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

关于c++ - 为小部件存储画家有意义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10072118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com