QWidget showFullScreen生成多个resizeEvents

时间:2011-11-27 16:39:01

标签: python qt fullscreen pyside qglwidget

我有一个使用PySide用python编写的QT应用程序,我偶然发现了一个关于QGLWidget的showFullScreen方法的一个小问题(尽管每个其他小部件都会出现问题):

问题是,在程序从showFullScreen返回后,窗口小部件没有“最终”分辨率。 交换机似乎在5到10毫秒之后异步触发。

这对我来说是一个问题,因为我必须做一些布局计算,这些布局计算取决于小部件显示后的大小。

下面是一个小副本QGLWidget的再现器。使用此复制器,您将注意到,resizeEvent将在showFullScreen之后调用两次。

我正在寻找一种方便的方法来了解当小部件真正处于全屏模式时,哪个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 :(得分:0)

一种可能性是检查调整大小事件是否为spontaneous。从这里的有限测试(在Linux上使用Qt C ++),第二个resize事件是自发的,而第一个不是。

只有当事件是自发的时,你才能进行计算。

注意:我不确定这是多么便携,可能取决于您的窗口管理器/窗口系统。