【问题标题】:Does it make sense to store a painter for a widget?为小部件存储画家是否有意义?
【发布时间】:2012-04-09 10:49:00
【问题描述】:

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

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

感谢您的宝贵时间, 路易丝

【问题讨论】:

    标签: c++ qt


    【解决方案1】:

    简单地说:别担心。

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

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

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

    【讨论】:

    • 好的,谢谢。尤其是关于不智取的一点;)对于新语言,很难判断您需要关心什么以及该语言为自己做了什么……似乎,Qt已经很聪明了;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-04
    • 1970-01-01
    • 1970-01-01
    • 2016-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多