0

コードを見つめる時間が長ければ長いほど、理解できなくなりますが、面白くなります。QPainter が円を描画する場合もあれば、描画しない場合もあります。

私の問題は、成功した場合、QPainterが描画しないことです。一方、成功しなかった場合引き分けになります。私が実際に達成したいのは、状態に応じて色を変えることです。このやや醜いコードは説明用です。QP.begin() をループの外側に移動するか、if 句の外側の最後に単一の drawEllipse() を配置しても、違いはありません。

def paintEvent(self, e):
        # compute here diameter, offsets, etc. but nothing qt related
        for i in xrange(5):
            painter = QtGui.QPainter(self)
            x_offset += 5
            if self.isSuccessful():
                print "Successful"
                painter.setBrush(QtGui.QColor(0,255,0))
                painter.drawEllipse(x_offset, y_offset, diameter, diameter)
            else:
                print "Not yet"
                painter.setBrush(QtGui.QColor(0,0,255))
                painter.drawEllipse(x_offset, y_offset, diameter, diameter)
            painter.end()

楕円が実際に描かれている場合とそうでない場合がある理由を教えてもらえますか?

出力は次のとおりです。

...
未未 まだ

未 まだ 成功 成功 成功 成功 成功 ...







楕円が以前に描かれたかどうかは問題ではありません。「まだ」の場合に drawEllipse() をコメントすると、円は描画されません。

4

1 に答える 1

1

問題は、私が作成した paintEvent のソースでした。含まれているテキスト ボックスがフォーカスを取得したときに、paintEvent が呼び出されました。しかし、イベントの更新領域にはテキスト ボックスしか含まれていませんでした。これは実際には理にかなっていますが、私にはわかりませんでした。したがって、paintEvent が呼び出されましたが、更新領域には円が含まれていませんでした。

問題を解決するウィジェット全体の update-method を呼び出すことで、問題を回避しました。

于 2011-09-21T06:58:59.180 に答える