QWidget全屏显示产生多个resizeEvent
我有一个用Python和PySide写的QT应用程序,遇到了一个小问题,跟QGLWidget的showFullScreen方法有关(其实其他控件也会有这个问题):
问题是,当程序从全屏模式返回时,控件的“最终”分辨率并没有立即确定。这个切换似乎是在5到10毫秒后才触发的。
这对我来说是个问题,因为我需要在控件显示后进行一些依赖于控件大小的布局计算。
下面是一个小示例,它继承了QGLWidget。使用这个示例,你会发现showFullScreen之后,resizeEvent会被调用两次。
我在寻找一种方便的方法来判断哪个resizeEvent是“最终”的,或者有什么办法可以知道控件到底什么时候真正进入了全屏模式。有没有可能有一些信号可以连接呢?
非常感谢任何帮助。
#!/usr/bin/python
import sys
from PySide.QtGui import QApplication
from PySide.QtCore import QTimer
from PySide.QtOpenGL import QGLWidget
class TestWidget(QGLWidget):
def __init__(self, parent=None):
super(TestWidget, self).__init__(parent)
self._timer = QTimer()
self._timer.setInterval(5)
self._timer.timeout.connect(self.showsize)
self._timer.start()
def resizeEvent(self, event):
print "Resize event:", event.size().width(), event.size().height()
def showsize(self):
w = widget.size().width()
print "Timer: ", w, widget.size().height()
if w == 1680:
self._timer.stop()
if __name__ == "__main__":
app = QApplication(sys.argv)
widget = TestWidget()
widget.showFullScreen()
print "After showFullScreen:", widget.size().width(), widget.size().height()
# this will always be 640 480...1680 1050 is what I'm expecting
app.exec_()
1 个回答
0
一种可能性是检查一下这个调整大小的事件是否是自发的。根据我在这里有限的测试(使用Qt C++在Linux上),第二次调整大小的事件是自发的,而第一次则不是。
你可以只在事件是自发的时候进行计算。
注意:我不太确定这个方法在不同的系统上是否都适用,可能会依赖于你的窗口管理器或窗口系统。