У меня есть приложение QT, написанное на python с использованием PySide, и я наткнулся на небольшую проблему, связанную с методом showFullScreen QGLWidget (хотя проблема возникает и с любым другим виджетом):
Проблема в том, что виджет не имеет своего «окончательного» разрешения после того, как программа возвращается из 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_()