我有一个使用 PySide 用 python 编写的 QT 应用程序,我偶然发现了一个关于 QGLWidget 的 showFullScreen 方法的小问题(尽管问题也发生在其他所有小部件上):
问题是,在程序从 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_()