在Qt4应用程序中,是否可以在paintEvent()
处理程序内部告诉重绘是否由调整大小触发?
我有一个非常慢的重绘小部件(一个复杂的情节),我想通过在重新调整窗口小部件时调整一个已调整大小的像素来加速调整大小,并且只重绘调整大小完成后的小部件。
我尝试在resizeEvent()
的开头和结尾处设置/取消设置标记,但这似乎不起作用(即标记始终在paintEvent()
中关闭。)
答案 0 :(得分:6)
我认为你不能轻易做到这一点。调整大小开始/停止时很难说,特别是跨平台方式。我可能会有resizeEvent
触发的单次定时器,它会将图像渲染到QPixmap
。如果在计时器仍处于活动状态时再次获得resizeEvent
,请重新启动它。在paintEvent
中始终绘制当前的像素图,并在从计时器渲染新的像素图后,在窗口小部件上调用update()
。不是一个理想的解决方案,但它应该有效。
答案 1 :(得分:3)
您可以采取的一种方法是始终绘制像素图,但如果窗口大小已更改,请记得“尽快”重新创建像素图。
因此,当paintEvent进来时,如果大小与当前像素图大小不同,则无论如何都要绘制存储的像素图,然后设置(或重置)QTimer以触发信号到一个插槽刷新像素图。
当此刷新方法运行时,它将重新呈现像素图并请求刷新小部件。
答案 2 :(得分:1)
另一种可能性是看看内部如何实现QMdiSubWindow::RubberBandResize,它可能会提供有关如何实现这一点的提示。如果我没记错的话,只能在QMdiSubwindow上工作 - 它会在调整大小时“停止”绘制(除了一个带透明体的小窗口边框)并在你停止调整窗口大小时激发一个最终的resizeEvent(触发更新/绘制)...... / p>