3

PySideを使用してPythonで記述されたQTアプリケーションがあり、QGLWidgetのshowFullScreenメソッドに関する小さな問題に遭遇しました(ただし、他のすべてのウィジェットでも問題が発生します)。

問題は、プログラムがshowFullScreenから戻った後、ウィジェットの「最終的な」解像度がないことです。スイッチは、5〜10ミリ秒後に非同期でトリガーされるようです。

ウィジェットが表示された後、ウィジェットのサイズに応じてレイアウト計算を行う必要があるため、これは私にとって問題です。

以下は、QGLWidgetをサブクラス化する小さな再現機能です。この再現機能を使用すると、showFullScreenの後にresizeEventが2回呼び出されることに注意してください。

ウィジェットが実際にフルスクリーンモードになっているときに、どの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_()
4

1 に答える 1

0

1つの可能性は、サイズ変更イベントが自発的であるかどうかを確認することです。ここでの限定的なテスト(LinuxでQt C ++を使用)から、2番目のサイズ変更イベントは自発的ですが、最初のイベントは自発的ではありません。

イベントが自発的である場合にのみ計算を行うことができます。

:これがどれほど移植性があるかはわかりません。ウィンドウマネージャー/ウィンドウシステムによって異なる場合があります。

于 2011-11-27T17:28:58.523 に答える