Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Qt4中,如何检查paintEvent是否由调整大小触发?_Qt_Events_Resize_Pyqt - Fatal编程技术网

在Qt4中,如何检查paintEvent是否由调整大小触发?

在Qt4中,如何检查paintEvent是否由调整大小触发?,qt,events,resize,pyqt,Qt,Events,Resize,Pyqt,在Qt4应用程序中,是否可以在paintEvent()处理程序中判断重新绘制是否由调整大小触发 我有一个小部件,它的重绘速度非常慢(一个复杂的绘图),我想在小部件调整大小时,通过快速调整大小的pixmap来加快重绘速度,并且只在重绘完成后重绘小部件 我曾尝试在resizeEvent()的开头和结尾设置/取消设置一个标志,但这似乎不起作用(即paintEvent()中的标志始终处于关闭状态)。我认为您不容易做到这一点。很难判断何时开始/停止调整大小,尤其是在跨平台的情况下。我可能会有一个由resi

在Qt4应用程序中,是否可以在
paintEvent()
处理程序中判断重新绘制是否由调整大小触发

我有一个小部件,它的重绘速度非常慢(一个复杂的绘图),我想在小部件调整大小时,通过快速调整大小的pixmap来加快重绘速度,并且只在重绘完成后重绘小部件


我曾尝试在
resizeEvent()
的开头和结尾设置/取消设置一个标志,但这似乎不起作用(即
paintEvent()
中的标志始终处于关闭状态)。

我认为您不容易做到这一点。很难判断何时开始/停止调整大小,尤其是在跨平台的情况下。我可能会有一个由
resizeEvent
触发的单镜头计时器,它会将图像渲染到
QPixmap
上。如果在计时器仍处于活动状态时收到另一个
resizeEvent
,请重新启动它。在
paintEvent
中,始终绘制当前的pixmap,并在从计时器渲染新的pixmap后,在小部件上调用
update()
。这不是一个理想的解决方案,但它应该会起作用。

您可以采取的一种方法是始终绘制pixmap,但请记住,如果窗口大小发生变化,请“尽快”重新创建pixmap

因此,当paintEvent进入时,如果大小与当前的pixmap大小不同,则无论如何都要绘制存储的pixmap,但随后设置(或重置)a以触发将刷新pixmap的插槽的信号


当此刷新方法运行时,它将重新呈现pixmap并请求刷新小部件。

另一种可能是查看如何在内部实现,它可能会提供有关如何实现这一点的提示。如果我没记错的话,它只能在qmdusubwindow上工作-它在调整大小期间“停止”绘制(带有透明主体的小窗口边框除外),并在停止调整窗口大小时触发一个最终调整大小事件(触发更新/绘制…

谢谢,我实现了类似的功能,它似乎工作得很好。如果鼠标左键按下,我也会重新启动计时器,因此如果您“暂停”调整大小,它不会触发重画。