2012-04-09 81 views
2

我有一个从QFrame派生的自定义Widget。我需要非常频繁地使用它(基本上,每次鼠标移动都会更新图片)。我检查了Qt Basic绘图示例:它们重写paintEvent,创建一个画家并进行绘制(并且画家在其生命周期结束时死亡,面对最终的花括号)。我想要更好地理解绘画操作(或者说:在频繁调用的方法中实例化临时对象的代价),所以我想知道:如果自定义QFrame持有一个指向一个(永久)画家的指针并将其用于绘画,那么在每次调用paintEvent的时候创建和删除一个都会更好吗?是否有意义的存储一个小部件的画家?

感谢您的时间, 路易丝

回答

4

简单地说:不要担心。

Qt在幕后创造了QPainter的一些魔力 - 特别是状态的“重”部分(绘画引擎)由所有在相同绘画设备上操作的QPainter共享。 (请参见here。)

现在,如果您从paintEvent处理程序中调用了一大堆需要画家的函数,请将它们引用到QPainter--无需为每个单独的调用创建一个函数。
但一般来说,不要担心。使用与您在示例中看到的相同的成语,并且只尝试做“更聪明”的东西,如果您实际上使用衡量,则实例化QPainters是您代码中的瓶颈。 (这不仅限于QPainter - Qt为重对象做了很多“幕后”共享,写入时复制类型的操作。示例和教程显示了你应该如何使用API (并且它们通常都是相当高质量的),请按照示例进行操作,只有在需要进行更复杂管理的特定原因/用例情况下,才能尝试将它们取代。)

+1

好的,谢谢。特别是关于不擅长的一点;)用新的语言,很难判断你需要关心什么以及语言为自己做些什么...似乎,Qt已经非常聪明;) – Louise 2012-04-09 11:18:38

相关问题