我正在寻找一种方法来最大限度地减少我的pyQt应用程序重绘'闪烁'。我的应用程序是一个QMainWindow,它包含两个QDockWidget派生对象(以及工具菜单和状态栏的常见分类组成)。其中一个QDockWidgets *使用QGridLayout在每个网格元素中排列许多QGLWidget派生的窗口。pyQt QWidget'闪烁'在调整大小和重绘
当我调整MainWindow的大小时,整个安排正确调整大小。然而,在QGLWidgets之间的空间中,我可以看到看起来有些部分呈现的奇怪形状的视图,其中一部分MainWindow在屏幕上“轻弹”,然后正确渲染。我的应用程序通常使用黑色风格着色,但QGLWidgets之间的闪烁通常只是白色和黑色。拖动主窗口边框的速度越快,这种闪烁就越明显。让我强调一下,'闪烁'只是在QGLWidget对象后面和背后的背景中,其他一切似乎都很好。
无论我是否在QGLWidgets中绘制了任何东西,闪烁都在那里,因此渲染没有沉重的负担。
有什么我可以做的,以消除重新绘制(和调整大小)事件的闪烁?
我已经尝试着将所有的小部件着色成相同的深色,在一些小部件上使用.hide()和.show()来玩,但它们似乎只是减缓了过程并使其变得更糟。
- 注意,我发现我不得不把一个虚拟的QWidget在QDockWidget作为QDockWidget不会接受(我猜它不支持)布局。也许这与此有关。
这是PyQt的4.10.1的Python 2.7在Windows 7上运行我对与PyQt的一个月经验
听起来非常类似于[QTBUG-17869](https://bugreports.qt.io/browse/QTBUG-17869)和[QTBUG-38327](https://bugreports.qt.io/browse/QTBUG-38327)。 – ekhumoro 2015-02-08 02:34:54
我查看了那些错误报告,谢谢,看起来像它和我的一样,并且与QGLWidget有关。非常令人沮丧!我得到的印象是这个bug在pyQt5中得到了解决,并推荐使用QOpenGLWidget。我不太愿意迁移到Qt5,但我的代码使用旧式Signals和插槽,直到我知道它确实是固定的 - 有人知道吗? – thefog 2015-02-08 15:02:39
您不必将整个应用程序移植到PyQt5来测试它。只需创建一个最小化的,自包含的示例脚本,在PyQt4中再现问题,然后将其转换为PyQt5。如果您不知道如何移植它,或者由于某种原因无法安装PyQt5,请在此处发布示例脚本,并且我或其他人都可以执行必要的测试。 – ekhumoro 2015-02-08 18:09:11