0

私の問題は、チェックボックスがオンになっている場合はシーンを回転させ続け、チェックを外すとすぐにこの回転を停止したいということです。しかし、「回し続ける」は無限ループを意味します...

したがって、ループに入った後、プログラムは一種のフリーズ状態になり、「チェック解除」信号に反応しなくなります。このループを中断する方法はありますか? 以下は、関連するコードのスケルトンです。ありがとう!

class Draw(QGLWidget):    
    def __init__(...):
        ...
        self.rotate=0
        self.auto=False

    def paintGL(self):
        glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
        glLoadIdentity()

        glRotatef(self.rotate,0.0,0.0,1.0)
        draw stuff...

        glFlush()

    def autoRotate(self,auto): # auto is an integer and used here as true/false 
        self.auto=auto
        while self.auto:
            self.rotate+=0.5
            if self.rotate>360:
                self.rotate-=360
            self.updateGL()
            if auto==False:
                break


class SpiralWidgetDemo(QtGui.QMainWindow):
    def __init__(self):
       ...
       auto=QtGui.QCheckBox("Auto")
       self.connect(auto,QtCore.SIGNAL("stateChanged(int)"),widget.autoRotate)
4

1 に答える 1

1

これをループとして実装してはなりません。これは、Qt アプリケーションの「メイン ループ」の実行を妨げるため、プログラムの相互作用を中断するように定義されています。

描画コードをイベント ハンドラー (再描画イベントなど) に入れ、タイマーを使用して定期的な間隔 (10/s など) でイベントを生成します。

于 2009-11-19T07:40:49.023 に答える