2

私は非常に奇妙な問題を抱えています。QCheckBox がチェックされるたびに、予想どおり drawall が呼び出されます。ただし、 drawall が終了すると、完全にハングします。クリックしたときに drawall (バージョン 2) を直接呼び出してみましたが、結果は同じです。

scene = QGraphicsScene(0, 0, 500, 500)

class SurrogateBeat(QGraphicsItem):
    def __init__(self,beat,top):
        super(SurrogateBeat, self).__init__()
        print "Init"

class Test(QWidget):
    def __init__(self):
        self.drawAll = QCheckBox("Draw all frames on screen",self)
        self.drawAll.stateChanged.connect(self.onDrawAllClicked)

    def onDrawAllClicked(self):                #Version 1
        QTimer.singleShot(0, self.drawall)

    def onDrawAllClicked(self):                #Version 2 (neither work)
        self.drawall()

    def drawall(self):
        if self.drawAll.checkState() ==  Qt.CheckState.Checked: 
            self.surrogates=[]
            for b in range(0,len(self.item.beats)):
                print "Loop"
                surrogate = SurrogateBeat(b, self.item)
                scene.addItem(surrogate)
                self.surrogates.append(surrogate)
            scene.update()
            print "Update"

ループが 16 回出力され、SurrogateBeat のinitが出力されるため呼び出されますが、「Update」が出力された後、プログラムがハングします。

4

1 に答える 1

2

QGraphicsItem抽象基本クラスです。

少なくとも、SurrogateBeatサブクラスは関数boundingRectpaint関数を再実装する必要があります。

于 2012-08-29T20:16:16.363 に答える